【问题标题】:In Linux terminal, how to delete all files in a directory except one or two在Linux终端中,如何删除目录中除一两个之外的所有文件
【发布时间】:2014-03-13 19:29:41
【问题描述】:

在Linux终端中,如何删除一个文件夹中除一两个以外的所有文件?

例如。

我在一个目录中有 100 个图像文件和一个 .txt 文件。 我想删除除 .txt 文件之外的所有文件。

【问题讨论】:

  • 除了哪一两个?
  • 你最好展示一些异常应该是什么样子的模式。否则我们只能给出一个非常笼统的答案。

标签: linux shell ubuntu filesystems


【解决方案1】:

从目录中列出文件,过滤掉所有不包含“要保留的文件”的文件,并删除列表中剩余的所有文件。

ls | grep -v 'file-to-keep' | xargs rm

为避免文件名中出现空格问题(记住不要在文件名中使用空格),请使用find-0 选项。

find 'path' -maxdepth 1 -not -name 'file-to-keep' -print0 | xargs -0 rm

或混合使用两者,使用grep 选项-z 管理来自find-print0 名称

【讨论】:

  • 如果文件名中有空格,这可能会出现问题。
  • 有效。我必须在当前目录中才能成功执行此命令。对吗?
  • 我以sudo ls directory/directory/directory1/ | grep -v 'readme.txt' | xargs rm 尝试了这个命令,但没有成功。我必须在许多目录上运行此命令。假设我directory 有兄弟姐妹directory2, directory3
  • @Bilal 对于以ls 开头的命令,是的,它将在当前目录中完成工作。如果您使用find 命令,那么您可以列出与'path' 一样多的目录。
  • 在选项 1 中,grep 需要在这里有 --line-regexp 参数,否则 /bin/w 将匹配 /bin/which
【解决方案2】:

一般来说,使用 grep 的反向模式搜索应该可以完成这项工作。由于您没有定义任何模式,我只是给您一个通用代码示例:

ls -1 | grep -v 'name_of_file_to_keep.txt' | xargs rm -f

ls -1 每行列出一个文件,以便 grep 可以逐行搜索。 grep -v 是倒置标志。所以任何匹配的模式都不会被删除。

对于多个文件,你可以使用 egrep:

ls -1 | grep -E -v 'not_file1.txt|not_file2.txt' | xargs rm -f

问题更新后更新: 我假设您愿意删除当前文件夹中不以.txt 结尾的文件以外的所有文件。所以这也应该有效:

find . -maxdepth 1 -type f -not -name "*.txt" -exec rm -f {} \;

【讨论】:

  • 史诗。干净的答案。谢谢。
【解决方案3】:

find 支持-delete 选项,因此您不需要-exec。也可以传递多组-not -name somefile -not -name otherfile

user@host$ ls
1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt josh.pdf keepme

user@host$ find . -maxdepth 1 -type f -not -name keepme -not -name 8.txt -delete

user@host$ ls
8.txt  keepme

【讨论】:

    【解决方案4】:

    使用not修饰符删除不想删除的file(s)pattern(s),可以修改传递给-maxdepth1指定要删除多少子目录深的文件来自

    find . -maxdepth 1 -not -name "*.txt" -exec rm -f {} \;
    

    你也可以这样做:

    find  -maxdepth 1 \! -name "*.txt" -exec rm -f {} \;
    

    【讨论】:

      【解决方案5】:

      在 bash 中,您可以使用:

      $ shopt -s extglob  # Enable extended pattern matching features    
      $ rm !(*.txt)       # Delete all files except .txt files
      

      【讨论】:

        猜你喜欢
        • 2023-01-20
        • 1970-01-01
        • 2010-10-26
        • 2012-08-08
        • 1970-01-01
        • 1970-01-01
        • 2014-02-12
        • 2023-03-28
        • 1970-01-01
        相关资源
        最近更新 更多