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


1

我有一个特殊的两个文件夹组,在我的CentOS服务器上很多地方。假设这些文件夹看起来像这样:

aaa/bbb/cat
aaa/bbb/dog

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

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

我可以使用什么命令删除每个实例中的所有文件 catdog 在服务器上,但只有当它们是子文件夹时 bbbaaa 分别如上图所示?

谢谢!


你用的是哪个shell?
Hastur

对不起,应该说,bash v4。但下面的答案已经解决了。谢谢!
R C

Answers:


1

从bash 4.0你可以使用 shopt -s globstar。默认情况下未启用。

用你的例子

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

给     文件夹1 / AAA / BBB /猫/ 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

当然你也可以用狗而不是猫重复它:-)
之前检查 ls 然后删除 rm。 笔记:
你必须记得启用globstar( shopt -s globstar )在你想要使用该语法的每个新shell上,你可以把它放在你的 ~..bash_rc 文件...


1

find 两次

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

或者做

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

谢谢你 - 问题已经解决了,虽然我喜欢你的答案是多么简洁。
R C
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.