在我的 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 -- *-*
删除-
当前目录中名称包含字符的所有文件。
在zsh
shell 中,使用*-*(.)
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 中将其作为多行命令键入肯定是可能的。