我有一个文件夹,里面有数千个文件,文件名为 23123 123r3883 3929388394j f38238d 等。我需要删除所有名称长度 > 9 的文件。我该怎么做?
答案1
你可以使用简单的 glob 表达式匹配至少包含 10 个字符的文件名??????????*
。因此,如果文件数量不太长,你可以使用
echo rm -- ??????????*
对于较长的文件列表,你可以使用以下命令分解名称xargs
:
printf '%s\0' -- ??????????* | xargs -r0 echo rm
如果从 切换bash
到zsh
,则可以使用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
一旦你确信正确的文件被匹配,就删除。