Linux:ファイル*を削除するがfile1とfile2は削除しない

Linux:ファイル*を削除するがfile1とfile2は削除しない

通常私は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 {} +

通常のファイルだけをフィルタリングするので、ワイルドカードを使用するのとは異なります。

関連情報