刪除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

給出folder1/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

當然,你也可以用狗而不是貓來重複它:-)
用之前檢查ls並用之後刪除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

相關內容