检查特定文件夹中的文件数量

检查特定文件夹中的文件数量

我有 100 个文件夹(称为“Folder_1”、“Folder_2”、“Folder_3”...),其中包含多个文件。从每个文件夹的循环中,我想运行命令(IE,显示文件夹名称)根据条件(IE,文件夹中的文件数不等于20133)。这是我的代码:

for f in *Folder*/; do cd "$f"; if ["$(find . -type f | wc -l)" -ne 20133]; then echo "$f" && cd ..; fi; done

但是,我有这些错误消息:

-bash: cd: Folder_1/: No such file or directory
-bash: [20133: command not found
...

答案1

您的问题在于,您总是输入当前目录 ( cd "$f"),但如果您命中 ( ),则仅返回一个目录then echo "$f" && cd ..

这就是我创建测试环境并编写工作示例所做的事情:

johan@iMac:~$ mkdir -p example/Folder_{1..20}
johan@iMac:~$ touch example/Folder_{1..20}/file_{1..10}
johan@iMac:~$ touch example/Folder_{18..20}/file_{11..15}
johan@iMac:~$ cd example
johan@iMac:~/example$ for f in Folder_*; do test "$(find "$f" -type f | wc -l)" -eq 15 && echo "$f"; done
Folder_18
Folder_19
Folder_20
johan@iMac:~/example$ cd ..
johan@iMac:~$ rm -rf example/

请注意,我使用内置语法test而不是 [ ... ] 语法来提高可读性。有趣的是,[角色只是一个程序,并且与程序相同test。这就是它的参数周围需要空格的原因:)

在这里检查一下(在我的 iMac 上)

johan@iMac:~$ md5 /bin/test
MD5 (/bin/test) = 2c4b51263409bd39f1ea0fa4f925130a
johan@iMac:~$ md5 /bin/[
MD5 (/bin/[) = 2c4b51263409bd39f1ea0fa4f925130a

相关内容