通常私はbashでこれをする
shopt -s extglob
rm !(filedontwantremove)
filedontwantantremoveを除くすべてのファイルを削除します。
しかし、 filedontwantwantremove と「完全に異なる名前を持つ別のファイル」を除くすべてのファイルを削除するにはどうすればよいですか?
私は解決策を見つけましたが、rm!()のようなものを好みます。
答え1
ちょうど使用:
shopt -s extglob
rm !(filedontwantremove|antotherfilewithatotaldifferentname)
しかし、extglobは通常bashの対話型シェルでデフォルトでオンになっています。
アクティブであることを確認するには:
$ shopt -p extglob
shopt -s extglob ### The -s means that it is set.
!(pattern-list)
そして、このコマンドを実行して、マニュアルでそのイディオムを説明するセクションを見つけます。
$ LESS=+/'If the extglob shell option is enabled' man bash
...ㅏパターンリスト|で区切られた1つ以上のパターンのリスト。
答え2
はい、解決策がfind
あり、POSIX方式です。
find . ! -name . -prune -type f ! -name 'file[12]' -exec rm {} +
通常のファイルだけをフィルタリングするので、ワイルドカードを使用するのとは異なります。