だから、作業を始める前にディレクトリを整理したいと思います。私はちょっとこんな感じです。
./static
├── css
│ └── styles
├── img
│ └── pictures
└── js
└── scripts
私はrm
の内容が欲しいが望んでいません。css
js
img
両方のパスを入れることができることを知っていますが、それは面倒でこの方法を試しましたが、成功しませんでした。
rm -r ./static/{css,js}/*
rm: './static/{css,js}/*' を削除できません。そのファイルやディレクトリはありません。
これを行う方法についてのアイデアはありますか?
答え1
*
あなたのコマンドはファイルとして扱われます。試してみてください。rm -rf ./static/{css,js}/
代わりに、Bash拡張ワイルドカード(最初にテストした後に削除echo
):
$ shopt -s extglob
$ cd static
$ echo rm -rf !(img)
または 短い答え
ls | grep -v "img" | xargs rm -rf
コメントでOPが提案したように、この手順に従って作業を完了してください。まず、ファイルを印刷してテストを実行して、必要なものを入手したことを確認してください。
$ find . -path ./img -prune -o -type f
./css/styles
./img
./js/scripts
確認後削除してください。
$ find . -path ./img -prune -o -type f -exec rm {} \;
$ static/
├── css
├── img
│ └── pictures
└── js
答え2
find
ちょっと長いですが、具体的に言いたいときはいつも好きです。これにより構造が保存され、imgディレクトリは無視されます。
find ./static -type d ! -name 'img' -exec rm -f {}/* \;
何が起こっているのか分析
find
注文する
./static
検索場所の指定
type -d
ディレクトリの選択
! -name 'img'
img ディレクトリを無視
-exec rm -f {}/* \:
'が{}
見つかったディレクトリ名に変わり、コマンドが実行されます。