我的预览帖子是关于删除系统中的单个名称文件,但我实际上需要删除大范围的文件。
上一篇
例如
它们是junkImg-5.png
,,junkImg-60.png
意思是有junkImg-30
,junkImg-45
...等等。
命令行中是否有任何快速命令可以删除它们?
我努力了
find /project/test/ -name 'junkImg-5*' -exec rm -f {} \ ;
但是速度太慢了,而且我有很多图片。有没有办法让 Linux 指定范围?非常感谢!
答案1
只需使用括号扩展删除一定范围的文件:
rm /project/test/junkImg-{5..60}.png
这将删除 junkImg 文件 5 到 60,只需一个rm
进程。您也可以先用 替换该rm
命令,ls
以确保它选择了您想要的文件,然后再用 替换它rm
。
答案2
寻找用途Shell 模式匹配为了-姓名谓词,因此您可以使用-或者谓词和这些模式:
find DIRECTORY -name 'junkImg-[5-9].png' -or -name 'junkImg-[1-6]?.png' -delete
您还可以使用以下方法排除前四个文件:-不是谓词:
find DIRECTORY -name 'junkImg-*.png' -not -name 'junkImg-[1-4].png' -delete
要测试命令是否正常工作,请始终在不-删除首先。这将列出文件而不是删除它们。
答案3
每次删除时都要启动一个新rm
命令。这不是最快的方法。只有当您的文件太多而无法一次性列出所有文件时才需要这样做。
为了加快速度,可以:
- 更改
-exec rm
with-ls
并通过 xargs 将其传输。如果您认为某些文件名比较难理解(例如文件名中有空格),请添加 -print0。 - 或者更好的是,使用 finds build in
-delete
。