在Bash中,除了位于特定文件夹中的文件外,如何删除所有具有相同名称的文件?

时间:2015-08-12 15:11:52

标签: bash find rm

我有一个特定的文件,可以在几个目录中找到。通常我会使用以下语法删除所有这些:

find . -name "<Filename>" -delete

但是,我想保留特定文件夹中的一个文件,比如FOLDER1。

如何使用find执行此操作? (我想使用find,因为我在-print之前使用-delete检查我要删除的文件。我担心使用rm因为存在删除文件的危险我想保留。)

提前致谢。

2 个答案:

答案 0 :(得分:1)

你可以用

完成
find . -name "filename" -and -not -path "./path/to/filename" -delete

您需要确保路径表达式是相对的,包括初始./,以便它与表达式匹配,或者使用通配符。因此,如果您知道它位于名为myfolder的文件夹中,但您不知道它的完整路径,则可以使用

find . -name "filename" -and -not -path "*/myfolder/filename" -delete

答案 1 :(得分:1)

如果您不想删除名为FOLDER1的任何目录下的任何,您可以告诉find不要使用-prune递归所有名称的目录。 :

find . -name FOLDER1 -prune -o -name filename -delete

这比递归该目录然后过滤掉以后包含它的结果更有效。

旁注:测试时,请务必使用明确的-print

find . -name FOLDER1 -prune -o -name filename -print

...而隐含的行为不会像你期望的那样:

# not what you want: equivalent to the below, not the above:
find . -name FOLDER1 -prune -o -name filename

...将表现为:

find . '(' -name FOLDER1 -prune -o -name filename ')' -print

...因此包含 -o运算符两侧的内容。