我想刪除給定目錄中的所有子目錄和文件,但匹配特定模式的目錄除外:
example_dir/model-*/gen-*/share/**
一般設定:我產生了多個模型(> 100),每個模型都有 >=1 代。這些模型(例如,example_dir/model-0/gen-0/
)中有幾個目錄和子目錄。
期望的結果:我想刪除除匹配的目錄和文件之外的所有目錄和文件:
example_dir/model-*/gen-*/share/
在每個模型/世代/中,它會是這樣的?
rm -rf !(share)
答案1
我不確定我完全理解你的問題,而且我不確定後續問題是否有意義。我想知道的一件事是,如果你有一個像這樣的目錄樹
example_dir
|-- model-0
| |-- gen-0
| | |-- share
| | |-- trash
| | | |-- more_trash
| | |-- file123.txt
| |-- grandfather
|-- platypus
foo
刪除example_dir/model-0/gen-0/trash
(及其內容)就足夠了,還是您還想刪除
example_dir/model-0/grandfather
,example_dir/platypus
和foo
?又如何呢example_dir/model-0/gen-0/file123.txt
?
如果您想刪除trash
(及其內容) 和file123.txt
,請嘗試
#!/bin/bash
shopt -s extglob
echo rm -rf example_dir/model-*/gen-*/!(share)
如果您想刪除trash
(及其內容)但保留file123.txt
,請嘗試
#!/bin/bash
shopt -s extglob
echo rm -rf example_dir/model-*/gen-*/!(share)/
(添加/
後!(share)
)。
無論哪種方式,請仔細查看輸出,如果您確定這是您想要的,請再次運行該命令(不帶 echo
.
如果您還想刪除 以外的頂級目錄example_dir
、與模式不符的一級目錄model-*
或與模式不符的二級目錄gen-*
,請編輯您的問題以澄清。