ディレクトリ内の一部のファイルを除いてすべてのファイルを削除する方法は?
ディレクトリ内のすべてのファイルを削除したいが、一部のファイルは除外したい。例えば、a b c ... z
というファイルがあるディレクトリで、u
とp
を除くすべてのファイルを削除する必要があります。これを簡単に行う方法はありますか?
rm
u,p
以外のすべての 0x6& を bash で実行するには、次のようにタイプするだけです。
rm !(u|p)
このためには以下のオプションを設定する必要があります。
shopt -s extglob
もっと見る グレッグのWiki ](http://mywiki.wooledge.org/glob)
そんな時は、
rm *
と入力して、Ctrl+X,を押して、``を全てのファイル名に展開します。
あとは、リストから好きなファイルを2つ削除して、最後にコマンドラインを実行すればいいんです。
find
find . ! -name u ! -name p -maxdepth 1 -type f -delete
!
は次の式を否定します -name
はファイル名を指定します -maxdepth 1
は指定されたディレクトリのみを処理します (find
はデフォルトではディレクトリをトラバースします) -type f
はファイルのみを処理します (ディレクトリなどは処理しません) -delete
はファイルのみを処理します。-print
はファイルを削除します その後、 find の man ページ
Update
-delete
の代わりに 0x6& を使用してコマンドをテストしてください。単純に、
mv
上位ディレクトリに欲しいファイルを入れて、rm
ディレクトリに入れて、mv
戻す。
この回答 ](https://superuser.com/a/529861/4724) と似ていますが、特別なオプションは必要ありません。私が知っている限りでは、以下はシェルに似た(漠然とした)/bin/sh(bash、zsh、kshなど)でサポートされている “古い "機能です。
find . -maxdepth 1 ! -name "u" ! -name "p" -type f -exec rm -rf {} \;
これは unix の u と p を除くすべてのファイルを削除します。
ここにもう一つのバリエーションがあります。次のように入力します。
rm -i *
と入力するか。
rm --interactive *
と入力すると、rm
は各ファイルの削除確認を求めてきます。
find . -type f ! -name 'u' ! -name 'p' ! -name '*.ext' -delete
find . -type d ! -name 'u' ! -name 'p' ! -name '*.ext' -delete
を使用して、u、p、.ext ファイルを除くディレクトリを含むすべてのファイルを削除します。
台無しにしにくい簡単な方法:例えば *.pdf以外をすべて削除したいとしましょう。
mkdir tmp
mv *.pdf tmp
rm *
mv tmp/* .
rm -r tmp