gpt4 book ai didi

linux - unix bash 查找具有 2 个显式文件扩展名的文件目录

转载 作者:IT王子 更新时间:2023-10-29 01:06:01 28 4
gpt4 key购买 nike

我正在尝试创建一个小的 bash 脚本,它基本上会查看包含数百个子目录的目录。在其中一些子目录中包括一个 textfile.txt 和一个 htmlfile.html,其中名称 textfile 和 htmlfile 是可变的。

我只真正关心同时具有 .txt 和 .html 的子目录,所有其他子目录都可以忽略。

然后我想列出同一子目录中的所有 .html 文件和 .txt 文件

这似乎是一个很容易解决的问题,但我不知所措。我真正能开始工作的是一行代码,它输出具有 .html 文件或 .txt 的子目录,与它们所在的实际子目录没有关联,而且我在 bash 脚本方面很新,所以我不能继续前进

#!/bin/bash

files="$(find ~/file/ -type f -name '*.txt' -or -name '*.html')"

for file in $files
do
echo $file

done

最佳答案

下面的 find 命令会检查每个子目录,如果它有 both htmltxt 文件,它列出了所有这些:

find . -type d -exec env d={} bash -c 'ls "$d"/*.html &>/dev/null && ls "$d"/*.txt &>/dev/null && ls "$d/"*.{html,txt}' \;

解释:

  • 找到 . -类型d

    这将查找当前目录的所有子目录。

  • -exec env d={} bash -c '...'\;

    这会将环境变量 d 设置为找到的子目录的值,然后执行包含在单引号内的 bash 命令(见下文)。

  • ls "$d"/*.html &>/dev/null && ls "$d"/*.txt &>/dev/null && ls "$d/"*.{ html,txt}

    这是执行的 bash 命令。它由三个语句和一起组成。第一个检查目录 d 是否有任何 html 文件。如果是,则运行第二条语句并检查是否有任何 txt 文件。如果是,则执行最后一条语句并列出目录 d 中的所有 html 和 txt 文件。

此命令对所有包含空格、制表符或其他困难字符的文件和目录名称都是安全的。

关于linux - unix bash 查找具有 2 个显式文件扩展名的文件目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26170832/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com