次から始まるが、次を含まないファイルを削除する

次から始まるが、次を含まないファイルを削除する

一度に多くのファイルを削除しようとしていますが、実際に必要なファイルは削除しないように具体的に説明する必要があります。

破損したファイルが多いオーナー -しかし、次から始まる有効なファイルがあります。マスター-2018

だから私は次のようなことをしたい

rm -rf master-* --exclude master-2018*

私に必要なことは可能ですか?

答え1

はい、複数のモードを使用できますfind

$ find -name 'master-*' \! -name 'master-2018*' -print0 -prune |
     xargs -0 echo rm -fr

echo試運転に満足したら削除してください)

現在のディレクトリからのみファイルを削除するには、-maxdepth 1その後に述語を追加する必要があります。つまり、削除はできません。findmaster-1991subdir/master-1991

答え2

バッシュから:

shopt -s extglob
echo rm master-!(2018*)

echo正しいと思われる場合は削除してください。

上記は bash の拡張されたグロービングツールを使用して開始しますmaster-が、2018すぐ後ろに何も表示されないファイルを一致させます(*)。

答え3

削除するすべてのファイルにmaster-YYYY *などのパターンがある場合は、次のパターンを使用できます。

rm -rf master-???[0-79]*
rm -rf master-??[02-9]*
rm -rf master-?[1-9]*
rm -rf master-[013-9]*

目標は年から数字を省略することであるため、マスターの次の最初の位置から数字2を省略(削除しない)し、2番目の位置では数字0、3番目の位置では数字1を省略する必要があります。 4番目の場所 - 8回私は少し前に試しましたが、最初の2つだけを実行しても十分でした。

2番目の方法:master-2018を/ tmpなどの他のディレクトリに移動し、master-*を使用してすべてのエントリを削除してからtmpからmaster-2018に戻すことができます。

mkdir /tmp/backup
mv -r master-2018* /tmp/backup
rm -rf master-*
mv -r /tmp/backup/* .

関連情報