名前に共通点がない指定された一部のファイルのみを維持しながら、ディレクトリ内のすべてのファイルを削除したいと思います。どうすればいいですか?
たとえば、保持するファイル名は次のとおりです。
file_1.png
、、、another_file.jpg
some_music.mp3
答え1
バッシュを使用する場合:
shopt -s extglob
rm -- !(file1|file2|file3)
最初の行は、拡張パターンマッチングを有効にした後、次のいずれかを使用します。
!(pattern-list)
与えられたパターンの1つを除くすべての項目と一致
パターンリストは、で区切られた1つ以上のパターンのリストです|
。
またはzsh
setopt extendedglob
rm -- ^(file1|file2)
または、より移植性が高い場合は、以下を使用してくださいfind
。
find . -maxdepth 1 ! -name 'file1' ! -name 'file2' -type f -exec rm -v {} +
答え2
サブディレクトリを作成し、アーカイブtmp
するすべてのファイルをそのディレクトリに移動し、次のrm -f *
操作を実行します。これはtmp
ディレクトリには影響しません。
次に、次のようにします。
mv tmp/* .
rmdir tmp
(移動するファイルの中からドットで始まるファイルがないとします。)
これは、マウスやNautilusなどのファイルブラウザを使用するのに適した数少ないケースの1つです。実際にCtrl保持したいファイルをいくつかクリックし、メニューを使用できます。Edit -> Invert Selection
他のファイルをインポートして削除できます。
答え3
1行に1つずつ、テキストファイルに保持するファイル名を追加します。ファイルはディレクトリにはありません。名前も追加する必要があります。
ディレクトリ名が次の場合金持ちファイル名は次のとおりです。バー、次の操作を行います。
find foo -type f -print0|grep -vzZ -f bar|xargs -0 rm
これは次のことを行います。
find -type f
すべてのファイル名を検索金持ちそして対応するサブディレクトリをSTDOUTとして印刷します。-print0
ファイル名をNULバイトで区切るオプションを使用してください。grep -v -f bar
次の行に一致するすべてのファイル名を除外します。バー。 options は-z
入力を NUL バイトで区切られた行セットとして扱い、 options を使用すると-Z
出力を NUL バイトとして扱います。xargs rm
ファイルを削除するために繰り返し呼び出されますrm
。オプションは、-0
入力をNULバイトで区切られた行セットとして扱います。
これはスペースを含むファイル名に適用されます。