Bash:查找某些文件夹中的文件,然后创建输出列表

时间:2016-06-20 21:49:18

标签: bash shell

我是Bash的新手,我试图在某组文件夹中查找文件。我想为每个/ check /文件夹中的图像文件创建一个txt报告。

以下是我一直在使用的内容:

# Find images
for f in */check/ ; do
    find ./ -iname "*jpg*" -o -iname "*png*" > find_images.txt
        echo "finished $f"
done

我无法弄清楚如何只查看名为" check"的子文件夹,我还想传递变量,以便获得以父文件夹命名的单独文本文件。有什么建议吗?

3 个答案:

答案 0 :(得分:1)

您已经关闭了,但是您没有使用包含该文件夹名称的$f

# Find images
for f in */check/ ; do
    # Removing front-slashes from $f to use in log name
    # http://mywiki.wooledge.org/BashGuide/Parameters#Parameter_Expansion
    log_f="${f//\//_}"

    # Only search inside $f, saving results to find_images_[foldername].txt
    find "$f" -iname "*jpg*" -o -iname "*png*" > "find_images_${log_f}.txt"

    echo "finished $f"
done

答案 1 :(得分:0)

使用 grep命令并使用查找命令管道

find . | grep check 

答案 2 :(得分:0)

find命令支持搜索目录(文件夹),例如

find . -name "check" -type d

您可以使用这些结果然后查找所需的文件。变量$ f将是文件夹的名称,因此请在inner find命令中使用它。然后,如果每次循环都需要单独的输出文件,请在文件名中使用变量。 $ f变量将在内容中包含斜杠,因此您可能不希望在输出文件的名称中使用它。在我的示例中,我使用计数器来确保每个输出文件都有唯一的名称。

count=1
for f in `find . -name "check" -type d` ; do
    find $f -iname "*jpg*" -o -iname "*png*" > find_images_$count_.txt
    count=$((count+1))
done