![如何删除文件夹中名称长度超过 X 的所有文件?](https://linux22.com/image/1185785/%E5%A6%82%E4%BD%95%E5%88%A0%E9%99%A4%E6%96%87%E4%BB%B6%E5%A4%B9%E4%B8%AD%E5%90%8D%E7%A7%B0%E9%95%BF%E5%BA%A6%E8%B6%85%E8%BF%87%20X%20%E7%9A%84%E6%89%80%E6%9C%89%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我有一个文件夹,里面有数千个文件,文件名为 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
一旦你确信正确的文件被匹配,就删除。