如何删除文件夹中名称长度超过 X 的所有文件?

如何删除文件夹中名称长度超过 X 的所有文件?

我有一个文件夹,里面有数千个文件,文件名为 23123 123r3883 3929388394j f38238d 等。我需要删除所有名称长度 > 9 的文件。我该怎么做?

答案1

你可以使用简单的 glob 表达式匹配至少包含 10 个字符的文件名??????????*。因此,如果文件数量不太长,你可以使用

echo rm -- ??????????*

对于较长的文件列表,你可以使用以下命令分解名称xargs

printf '%s\0' -- ??????????* | xargs -r0 echo rm

如果从 切换bashzsh,则可以使用glob 限定符测试每个文件名的长度(通过变量传递REPLY)。一个优点是您可以轻松添加其他限定符,如N(相当于 bash shell 的nullglob)和.(将结果限制为纯文件):

echo rm -- *(.Ne:'[[ $#REPLY -gt 9 ]]':)

或者

print -rNC1 -- *(.Ne:'[[ $#REPLY -gt 9 ]]':) | xargs -r0 echo rm

要在 bash 中执行相同的操作,可能需要一个循环,例如

for f in *; do
  [[ -f $f && $#f -gt 9 ]] && echo rm -- "$f"
done

echo一旦你确信正确的文件被匹配,就删除

相关内容