删除目录中文件名中带有连字符的文件

删除目录中文件名中带有连字符的文件

在我的 macOS 系统上,我有一个包含 7,000 多个图像的文件夹,需要删除文件名中带有连字符的图像。我在cd进入目录后尝试了以下命令,但没有得到响应(我是终端新手):

rm -rf -- -
$ rm ./-
find . -type f -regex '/-/' -exec rm {} \;
find . -name '-*' | xargs rm
find . -regex '/-/' -print0 | xargs -0 rm

答案1

该模式*-*将匹配当前目录中的任何名称包含破折号(字面意思是“至少包含一个 的名称-,可能以其他字符串为前缀和/或后缀”)。这意味着你应该能够做到

rm ./*-*

或者

rm -- *-*

删除-当前目录中名称包含字符的所有文件。

zshshell 中,使用*-*(.)as 模式会将匹配限制为仅常规文件(不是目录,但rm无论如何都无法删除目录)。

如果这些文件太多而无法rm一次性处理,请find像这样使用:

find . -maxdepth 1 -type f -name '*-*' -delete

我用来-maxdepth 1将搜索限制为仅当前目录,并且添加了-type f仅删除常规文件。

您还可以使用(有点慢)循环:

for name in ./*-*; do
    rm "$name"
done

有些人更喜欢“one-liners”,这个循环可以写成

for name in ./*-*; do rm "$name"; done

...尽管在大多数现代 shell 中将其作为多行命令键入肯定是可能的。

相关内容