如何在Linux中删除以特定字符串开头的所有文件


Answers:



64

删除文件名以“ foo”开头的当前目录及其子目录中的所有文件:

$ find . -type f -name foo\* -exec rm {} \;

注意:请谨慎使用-先备份-也要先空试,例如

$ find . -type f -name foo\*

只会告诉您将要删除的文件的名称。


5
我不得不删除超过200万个文件并遇到麻烦,find . -type f -name foo\* -delete成功解决了问题
Linas



3

使用globstar选项(启用shopt -s globstar):

rm -f **/NAME*

**/扩展为./*/*/*/*/*/*/等,如果你有一个目录开头的名称NAME,该命令会抱怨rm不能删除目录,但仅此而已。

请注意,如果glob与许多文件匹配,这可能会遇到命令行长度限制。

另外,调用次数rm尽可能少,但不受命令行长度限制:

find . -type f -name 'NAME*' -exec rm -f {} +

(请注意,+而不是\;关闭该-exec语句。)


2

find . -name 'foo'* -type f -delete 似乎是最简单的答案。

您可以在不带-delete标志的情况下运行此命令,以查看将删除哪些文件。


-2

搜索文件/文件夹的“ Inode”编号,然后使用inode编号删除。下面是一个示例:

ls -il
3407873 drwxr-xr-x. 2 root   root      4096 Mar 30 07:49 p

find . -inum 3407873 -exec rm -rf {} \;

这是一个很好的答案-一个不同的问题。这不是这个问题的答案。
斯科特,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.