删除 Linux 中特定文件夹中的所有文件

删除 Linux 中特定文件夹中的所有文件

我的 CentOS 服务器上有很多地方都有一组特定的文件夹。假设这些文件夹如下所示:

aaa/bbb/cat
aaa/bbb/dog

aaabbbcat的名称和结构dog是固定的,但它们在服务器中会出现在多个位置。例如:

/folder1/aaa/bbb/cat
/folder1/aaa/bbb/dog
/folder2/folder3/folder4/aaa/bbb/cat
/folder2/folder3/folder4/aaa/bbb/dog
etc...

我可以使用什么命令来删除服务器上cat和的每个实例内的所有文件,但仅当它们分别是和的子文件夹时才删除,如上所示?dogbbbaaa

谢谢!

答案1

从 bash 4.0 开始,您可以使用shopt -s globstar。默认情况下未启用。

用你的例子

ls **/aaa/bbb/cat/*     # globstar not enabled

给出文件夹 1/aaa/bbb/cat/1

shopt -s globstar
ls **/aaa/bbb/cat/*     # globstar ENABLED

给出

folder1/aaa/bbb/cat/1  folder2/folder3/folder4/aaa/bbb/cat/3

这是tree .您的例子。

.
├── folder1
│   └── aaa
│       └── bbb
│           ├── cat
│           │   └── 1
│           └── dog
│               └── 1
├── folder2
│   └── folder3
│       └── folder4
│           └── aaa
│               └── bbb
│                   ├── cat
│                   │   └── 3
│                   └── dog
│                       └── 4

当然,您也可以用 dog 代替 cat 来重复此操作 :-)
检查 with 之前的内容ls,并在 with 之后删除rm。注意:
您必须记住shopt -s globstar在每个想要使用该语法的新 shell 上启用 globstar(),否则您可以将其放在文件中~..bash_rc...

答案2

运行find两次

find . -path "*/aaa/bbb/cat/*" -delete
find . -path "*/aaa/bbb/dog/*" -delete

或者

find . \( -path "*/aaa/bbb/cat/*" -o -path "*/aaa/bbb/dog/*" \) -delete

相关内容