【问题标题】:Delete all files & directories in a folder except one file删除文件夹中除一个文件外的所有文件和目录
【发布时间】:2019-11-21 19:49:35
【问题描述】:

我想删除文件夹中的所有文件和目录,例如“A”。但除了该文件夹中的一个文件说.keep。我尝试了以下命令。

find A ! -name '.keep' -type f -exec rm -f {} +

但上面的命令也会删除文件夹 A。我不希望这样。有几个与此相关的答案。但他们都提到进入那个目录。我想在命令中提及该目录,而无需 cd-e 进入该目录。

【问题讨论】:

  • find A -mindepth 1 ! -name '.keep' -delete
  • @ymonad 会递归工作吗?
  • 这取决于递归的含义。它删除A/hooA/B/hooA/A/ (if empty),不删除AA/.keepA/B/.keep。如果不是你想要的,你应该把你想删除的和你想保留的更准确地写出来。
  • 顺便说一下,您的命令不应该删除文件夹 A,因为您指定了 -type f。你的命令真的会删除它吗?
  • @ymonad。你的命令有效

标签: linux command rm


【解决方案1】:

我们可以使用 find 命令过滤内容并将输出传递给 xargs 以删除。

您可以使用以下示例作为参考。

示例: 我在名为 test 的文件夹中有文件夹文件夹 {1..15}。并使用 find 和 xargs 我将删除文件夹 6 和 11 以外的所有文件夹。

  1. 列出文件夹 ~/Desktop/MyDocuments/scripts/test$ ls 文件夹1 文件夹10 文件夹11 文件夹12 文件夹13 文件夹14 文件夹15 文件夹2 文件夹3 文件夹4 文件夹5 文件夹6 文件夹7 文件夹8 文件夹9

  2. 使用 find 命令进行过滤。 ~/Desktop/MyDocuments/scripts/test$ 查找 . ( !-name 文件夹 6 -and !-iname 文件夹 11 -and !-iname "." ) ./文件夹1 ./文件夹2 ./文件夹3 ./文件夹4 ./文件夹5 ./文件夹7 ./文件夹8 ./文件夹9 ./文件夹10 ./文件夹12 ./文件夹13 ./文件夹14 ./folder15

  3. 删除带有 xargs 的文件夹。 ~/Desktop/MyDocuments/scripts/test$ 查找 . (!-name folder6 -and !-iname folder11 -and !-iname ".") | xargs -I {} rm -rf {}

  4. 已删除除文件夹 6 和 11 之外的所有文件夹。 ~/Desktop/MyDocuments/scripts/test$ ls 文件夹11 文件夹6

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-19
    • 2010-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多