刪除與特定模式相符的子目錄之外的所有子目錄

刪除與特定模式相符的子目錄之外的所有子目錄

我想刪除給定目錄中的所有子目錄和文件,但匹配特定模式的目錄除外:

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/platypusfoo?又如何呢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-*,請編輯您的問題以澄清。

相關內容