我有一个特定的文件,可以在几个目录中找到。通常我会使用以下语法删除所有这些:
find . -name "<Filename>" -delete
但是,我想保留特定文件夹中的一个文件,比如FOLDER1。
如何使用find执行此操作? (我想使用find
,因为我在-print
之前使用-delete
检查我要删除的文件。我担心使用rm
因为存在删除文件的危险我想保留。)
提前致谢。
答案 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
运算符两侧的内容。