如何从文件夹中删除除几个文件夹之外的所有文件/文件夹?

如何从文件夹中删除除几个文件夹之外的所有文件/文件夹?

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

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

现在我想删除除config和 之外的所有文件夹logs(在本例中仅src)。myPWD当前是 dir 的父级appliaction/(即我可以application在我的 中看到PWD)。

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

答案1

尝试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 {} \;即使目录不是空的,最后的命令也会删除它。

答案2

这种方法比其他一些可能的解决方案要麻烦一些,但当我删除文件时,我希望能够仔细检查哪些文件会永远消失。以下步骤假设您可以在 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 到“应用程序”文件夹的路径。在您的示例中,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填写,运行脚本就可以完成所有操作。最终结果应该是applicationnot in的每个直接子文件夹to-keep.txt及其内容都将被删除。

答案3

基于Jos 的回答,我用这个只删除当前目录中除目录之外的所有文件和目录.git

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

我实际上很害怕并且认为这.git也删除了目录,但我只是忘了使用a带有la( ls -la) 的标志。

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

(此外,使用时切勿使用相对路径rm -r!)

答案4

我将用我的 shell (zsh) 执行下列操作(但我认为用 bash 可以执行相同的操作)。

  1. 类型

    echo application/*(/) 
    

和,无需点击回车, 按TAB

  1. shell 将扩展模式 glob;在本例中,是以下所有目录的列表application;该行现在应该是

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

  3. 我再三检查并编辑了首echo字母rm -rf

  4. 我再次检查并且...

  5. ...点击回车。

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

相关内容