假设我有一个文件结构:
$ 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
(您可以看出区别只是将选项添加
-c
到uniq
)。