List 如何使用Find命令删除除列出的文件以外的所有文件?

List 如何使用Find命令删除除列出的文件以外的所有文件?,list,shell,find,List,Shell,Find,我在文件“list_files”中有一个隐藏文件列表,不应在当前目录中删除。如何使用Find命令删除除它们之外的所有内容?我试过了,但显然不起作用: find . -iname ".*" \! -iname 'list_files' 可以通过使用bash脚本调用exec来实现这一点,如下所示:- find . -iname ".*" -exec bash -c "fgrep {} /tmp/list_files >/dev/null || rm -i {}" \; 在构建文件列表时要非

我在文件“list_files”中有一个隐藏文件列表,不应在当前目录中删除。如何使用Find命令删除除它们之外的所有内容?我试过了,但显然不起作用:

find . -iname ".*" \! -iname 'list_files'

可以通过使用bash脚本调用exec来实现这一点,如下所示:-

find . -iname ".*" -exec bash -c "fgrep {} /tmp/list_files >/dev/null || rm -i {}" \;
在构建文件列表时要非常小心。要排除的文件列表必须与find生成的输出相同,否则将删除与模式匹配的所有文件

我已经在rm上设置了交互选项,您可能希望将其用于测试。如果希望使用此技术删除目录,则需要修改rm选项

您可能希望使用运行查找时使用的同一文件夹中的“查找”来构建文件列表,以确保排除项得到遵守,尽管绝对路径比相对路径更好,即更安全,因此您的查找将变得更安全

find /some/folder/name -name "some pattern" -exec ....

可以通过使用bash脚本调用exec来实现这一点,如下所示:-

find . -iname ".*" -exec bash -c "fgrep {} /tmp/list_files >/dev/null || rm -i {}" \;
在构建文件列表时要非常小心。要排除的文件列表必须与find生成的输出相同,否则将删除与模式匹配的所有文件

我已经在rm上设置了交互选项,您可能希望将其用于测试。如果希望使用此技术删除目录,则需要修改rm选项

您可能希望使用运行查找时使用的同一文件夹中的“查找”来构建文件列表,以确保排除项得到遵守,尽管绝对路径比相对路径更好,即更安全,因此您的查找将变得更安全

find /some/folder/name -name "some pattern" -exec ....

应始终安全地删除文件

我假定您有一个包含隐藏文件的目录树和一个要保留的这些隐藏文件的子集列表。您想删除所有其他隐藏文件

find `pwd` -iname ".*" -type f > all-hidden-files.txt
让我们从隐藏文件列表开始

find `pwd` -iname ".*" -type f > all-hidden-files.txt
现在,假设您有一些过滤器,可以将列表减少到所有要保留的文件(创建列表文件)。在这里,您可以手动编辑文件列表以保留不想删除的文件

SomeFilter all-hidden-files.txt > list_files
下一个命令将标识列表_文件中缺少的all-hidden-files.txt中的行,这将为您提供可以删除的文件

comm -3 all-hidden-files.txt list_files > removable-files.txt
编辑:刚刚意识到comm的输入文件应该被排序。所以用这个作为

comm -3 <(sort all-hidden-files.txt | uniq) <(sort list_files | uniq) \
    > removable-files.txt

comm-3删除文件应始终安全完成

我假定您有一个包含隐藏文件的目录树和一个要保留的这些隐藏文件的子集列表。您想删除所有其他隐藏文件

find `pwd` -iname ".*" -type f > all-hidden-files.txt
让我们从隐藏文件列表开始

find `pwd` -iname ".*" -type f > all-hidden-files.txt
现在,假设您有一些过滤器,可以将列表减少到所有要保留的文件(创建列表文件)。在这里,您可以手动编辑文件列表以保留不想删除的文件

SomeFilter all-hidden-files.txt > list_files
下一个命令将标识列表_文件中缺少的all-hidden-files.txt中的行,这将为您提供可以删除的文件

comm -3 all-hidden-files.txt list_files > removable-files.txt
编辑:刚刚意识到comm的输入文件应该被排序。所以用这个作为

comm -3 <(sort all-hidden-files.txt | uniq) <(sort list_files | uniq) \
    > removable-files.txt

comm-3在源目录中创建一个临时目录,将所有内容移动到临时目录,将要保存的文件移回原始位置,然后递归删除临时目录。由于移动都在一个文件系统上,因此对于任何一个合适的文件系统来说都应该是即时的,这是非常安全的。

在源目录中创建一个临时目录,将所有内容移动到临时目录,将要保存的文件移回原始位置,然后递归地删除临时目录。由于所有的移动都在一个文件系统上,所以对于任何一个合适的文件系统来说都应该是即时的,这是非常安全的