1つのファイルを除くすべてのファイル/ディレクトリを削除する

1つのファイルを除くすべてのファイル/ディレクトリを削除する

多くのファイルを含むディレクトリがあります。 file.txtを除くすべてのファイルを削除したいです。どうすればいいですか?

不要なファイルを個別に削除するにはファイルが多すぎます。

誰かが使用を提案しました。

rm !(file.txt)

しかし、これはうまくいきません。次を返します。

Badly placed ()'s 

私のオペレーティングシステムはScientific Linux 6です。

どんなアイデアがありますか?

ベストアンサー1

POSIX的に:

find . ! -name 'file.txt' -type f -exec rm -f {} +

名前付きディレクトリを除くすべての一般ファイル(隠しファイルを含む)を繰り返し削除しますfile.txt。ディレクトリを削除するには、に-type f変更してオプションを-type d追加します。-rrm

で をbash使用するには、rm -- !(file.txt)次の操作を行う必要があります。extglobの有効化:

$ shopt -s extglob 
$ rm -- !(file.txt)

(または電話bash -O extglob

Kornシェルシリーズextglobでのみ利用可能です。bash使用時にエラーが発生する可能性rm -- !(file.txt)がありますArgument list too long

以下を使用してパターンを否定zshできます。^グローバル拡張できるようにする:

$ setopt extendedglob
$ rm -- ^file.txt

kshまたはbash、オプションと同じ構文を使用しksh_globno_bare_glob_qual有効にします。

おすすめ記事