如何从文件夹中删除除少数文件夹以外的所有文件/文件夹?

假设我有一个目录结构如下:

application │ ├── config │ ├── c1.conf │ └── c2.conf │ ├── logs │ ├── l1.txt │ └── l2.txt │ └── src ├── static ├── s1.py └── s2.py 

现在我想删除除configlogs之外的所有文件夹(在这种情况下,只有src )。 我的PWD目前是appliaction/ dir的父母(即我可以在我的PWD看到application )。

我应该使用什么命令? (我尝试使用rm -rf的一些选项,但错误地删除了其他文件,所以我想在尝试其他任何事情之前知道正确的答案!)

尝试find ./application/ -type d -not -name config -not -name logs

如果返回正确的目录,请运行

find ./application/ -type d -not -name config -not -name logs -exec rm -R {} \;

exec rm -R {} \; 最后删除目录,即使它不是空的。

这种方式比其他一些可能的解决方案要多一些,但是当我删除文件时,我希望能够仔细检查永远消失的内容。 以下步骤假设您可以在您的PWD中看到“申请”,如您的问题中所述。

首先创建一个新的文本文件,其中包含要保留(不删除)的每个文件夹的名称,每行一个文件夹。 将其保存为to-keep.txt ,例如:

 config logs 

然后将以下内容复制到文本编辑器中并将其另存为rm-exclude.sh以便所有三个文件都在同一目录中。

 #!/usr/bin/env bash find "./$1" -maxdepth 1 -type d ! -path "./$1" > to-delete.txt dels=`cat to-delete.txt` readarray -t keeps < to-keep.txt for keep in "${keeps[@]}"; do dels=`echo "$dels" | grep -v "$keep"` done echo "$dels" > to-delete.txt 

使用以下命令使其可执

chmod +x rm-exclude.sh

然后使用以下命令运行它,其中PATH是PWD中“application”文件夹的路径。 在您的示例中, PATH只是application

./rm-exclude.sh PATH

最后,检查to-delete.txt以确保没有删除任何不应该删除的内容,并运行:

readarray -t dels < to-delete.txt; for del in "${dels[@]}"; do rm -rf "$del"; done

如果你不关心检查txt文件的内容,你可以简单地将上面的命令复制并粘贴到rm-exclude.sh的末尾,这样运行脚本就可以完成所有操作,只要你必须to-keep.txt已经填写完毕。 最终结果应该是不删除to-keep.txtapplication每个直接子文件夹及其内容。

根据Jos的回答 ,我使用它来删除当前目录中的所有文件和目录,但.git目录除外。

sudo find /home/jeffy/django_files/djauth_lifecycle_tutorial/part_04/ -maxdepth 1 -mindepth 1 -not -name .git -exec rm -rf {} \;

我实际上害怕,并认为这也删除了.git目录,但我只是忘了使用lals -laa标志。

mindepth标志是为了避免删除根目录本身。 -maxdepth防止返回所有子目录和文件,这对f标志是多余的。

(另外,使用rm -r时永远不要使用相对路径!)

我将使用我的shell(zsh)进行以下操作(但我认为使用bash是等效的)。

  1. 类型

     echo application/*(/) 

并且, 如果没有返回 ,请按TAB键。

  1. shell会扩展模式glob; 在这种情况下, application中的所有目录的列表; 这条线现在应该是

     echo application/config application/logs application/src 
  2. 现在我将编辑该行以删除我想要维护的目录。

  3. 我将三重检查并编辑初始echorm -rf

  4. 我再次检查……

  5. …回击。

无论如何,这种任务(通过手工文件或文件夹选择对他们应用动作)最好用某种视觉辅助来完成,除非你是像我这样的命令行“书呆子”…例如人们真的喜欢午夜指挥官 。