使用 --ignore 时从 ls 输出中排除“空”文件夹

使用 --ignore 时从 ls 输出中排除“空”文件夹

假设我有一个包含许多子文件夹的文件夹,它们只应该包含存档文件,并且我想检查是否有其他文件类型。

我可以使用命令

ls -l -R /backup --ignore="*.zip" --ignore="*.7z"

这将显示我需要的信息,但也包括每个文件夹名称,例如

/backup/2000/Jan:
total 0

/backup/2000/Feb:
total 0

ETC

有什么方法可以排除仅包含被忽略文件的文件夹的详细信息吗?

答案1

我有一个包含很多子文件夹的文件夹,它们只应该包含存档文件,我想检查是否有其他文件类型

这看起来不像是一份工作ls。看起来像是一份工作find。要求它列出与存档文件模式不匹配的常规文件。

find /backup -type f ! -name '*.zip' ! -name '*.7z'

如果您想查看与文件名-ls相同的信息,请在末尾添加。 ls -l(并非在所有实现中都可用find。)

答案2

你有几个解决方案。最简单的方法可能是使用 shell 的扩展通配符。

shopt -s extglob
ls -l **/*!(.zip|.7z)

您也可以使用find.

find /backup -type f ! \( -name "*zip" -o -name "*7z" \)

第一个命令将排除隐藏目录,第二个命令不会。

相关内容