需要命令帮助来查找所有太长的文件名并从目录中删除

需要命令帮助来查找所有太长的文件名并从目录中删除

我一直在使用以下命令:

find . | awk 'function base(f){sub(".*/", "", f); return f;} \
{print length(base($0)), $0}'| sort -nr | head -2

它会找到一些文件名太长的文件,但不是全部,并且不会删除它们。

我可以使用什么命令来完成此任务?

答案1

如果您有 GNU find,则可以使用正则表达式来查找名称超过给定长度的文件。例如,这将查找名称为 20 个字符或更多字符的文件:

find . -regextype egrep -regex '.*/[^/]{20,}$'

您可以通过添加以下内容来删除这些文件-delete

find . -regextype egrep -regex '.*/[^/]{20,}$' -print -delete

没有 GNU find,您可以计算?s:

find . -name '????????????????????*'

并使用以下命令删除文件-exec rm

find . -name '????????????????????*' -type f -print -exec rm {} +

-type f确保这只匹配文件,并-exec rm {} +指示一次性find运行尽可能多的文件。rm或者,要删除任何内容(无论类型如何),请使用

find . -name '????????????????????*' -print -exec rm -rf {} +

如果你想构造 的系列?,你可以使用

printf '%20s*' | tr ' ' '?'

(20 个字符),因此

find . -name "$(printf '%20s*' | tr ' ' '?')" -print -exec rm -rf {} +

答案2

使用findPerl,删除超过 42 个字符的文件名:

max=42
find . -print0 | perl -0sne 'unlink if length > $max' -- -max=$((max-2))

perldoc -f unlink

unlink 删除文件列表。成功后,它会返回成功删除的文件数。失败时,它返回 false 并设置 $! (错误号):

小心使用!如果你不在好的目录中,你可以毁掉整个系统

前导./需要 2 个字符。这就是为什么我-2在 shell 中进行减法

相关内容