web-dev-qa-db-ja.com

rm -rfから一部のファイルを除外することは可能ですか?

別のユーザーが入力したディレクトリがあり、それを管理する必要があります。特定の名前を持つ2つのファイルを除くすべてのコンテンツを削除したい。 rmで可能ですか、これを行う必要がありますか:

cp aaa/a ./a && cp aaa/b ./b && rm -rf aaa/* && mv ./a aaa/a && mv ./b aaa/b

ここで、aaaはディレクトリ、a,bは保持するファイルであり、そこに他のファイル/ディレクトリがあります(少なくとも、存在する可能性があります)。

より良い(そしてより短い)方法はありますか?

3
CIsForCookies

Bash拡張グロブで、与えられた

$ tree aaa
aaa
├── a
├── b
├── c
├── d
├── e
└── subdir

それから

rm -rf aaa/!(a|b)

$ tree aaa
aaa
├── a
└── b

0 directories, 2 files
8
steeldriver