一度に多くのファイルを削除しようとしていますが、実際に必要なファイルを削除しないように具体的に指定する必要があります。
master-で始まる破損したファイルがたくさんありますが、master-2018で始まる有効なファイルがあります
だから、私は次のようなことをしたいです
rm -rf master-* --exclude master-2018*
それは可能ですか?
はい、find
で複数のパターンを使用できます:
$ find -name 'master-*' \! -name 'master-2018*' -print0 -Prune |
xargs -0 echo rm -fr
(ドライランに満足したら、echo
を削除してください)
-maxdepth 1
述語をfind
の直後に追加する必要があるのは、roが現在のディレクトリからファイルを削除するだけの場合、つまりmaster-1991
は削除し、subdir/master-1991
は削除しない場合です。
バッシュで:
shopt -s extglob
echo rm master-!(2018*)
正しく見える場合は、echo
を削除します。
上記は、bashの拡張グロビング機能を使用して、master-
で始まり、直後に2018
がなく、その後に何でも続くファイル(*
)を照合します。
削除するすべてのファイルに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/* .