查看文件夹中是否有某些具有特定扩展名的文件

查看文件夹中是否有某些具有特定扩展名的文件

假设我有一个文件结构:

$ cd /home/Desktop
$ ls -d */
Abc/ Qwe/ Zxc/ Rty/
$

现在我想遍历每个目录并查看它们是否有任何“.pdf”文件。有人可以告诉我最好的方法是什么吗?

答案1

for dir in Abc/ Qwe/ Zxc/ Rty/; do
  result="$(find "$dir" -maxdepth 1 -type f -name '*.pdf' -printf .)"
  echo "Folder '${dir}' contains ${#result} *.pdf files."
done

这会忽略子目录。

答案2

使用find /home/Desktop -type f -name '*.pdf'

答案3

使用find无疑是最快的方法。如果您想限制要查找的目录,可以使用:

find <dir1> <dir2> ... -type f -name '*.pdf'

如果你想统计文件数量:

find <dir1> <dir2> ... -type f -name '*.pdf' | wc -l

答案4

有几种不同的方法可以做到这一点,具体取决于您想对信息执行什么操作。

  • 如果您想要一个直接包含文件的目录列表.pdf(即仅在顶层,不在子目录中),我会这样做:

    dirname */*.pdf | sort | uniq
    
  • 如果您想要包含任何级别的文件的目录列表.pdf(因此它们可以位于该目录的子目录中),请尝试

    find . -name '*.pdf' | cut -d/ -f2 | sort | uniq
    

    或者,如果您只想搜索某些子目录,

    find Abc Qwe Zxc Rty -name '*.pdf' | cut -d/ -f1 | sort | uniq
    
  • .pdf如果您想要子目录中所有文件的列表,那么只需

    find . -name '*.pdf'
    
  • 如果您想要计算每个目录中的文件数.pdf,则仅计算我会使用的顶层文件数

    dirname */*.pdf | sort | uniq -c
    

    或将文件包含在子目录中

    find . -name '*.pdf' | cut -d/ -f2 | sort | uniq -c
    

    (您可以看出区别只是将选项添加-cuniq)。

相关内容