回答:
rmを使用する代わりに、findを使用する方が簡単な場合があります。このようなコマンドは、正確に「file」という名前のファイルを除くすべてを削除します
find . \! -name 'file' -delete
の多くのバージョンは、グロビングと正規表現の一致をサポートできるはずです。
findの出力をrmにパイプすることもできます
find . \! -name '*pattern*' -print0 | xargs --null rm
-delete
ファイルを削除することで保存されるかなど-delete
と\!
。
find
再帰的です!' pattern 'に一致しないすべてのファイルサブディレクトリも削除されます
ls -1 | grep -v "^[XYZ]$" # | xargs rm -r
重要:コマンドを実行し、削除するファイルが正しいファイルである場合は、再度実行して、ハッシュ文字「#」を削除します。
ファイル名がそれよりも複雑な場合は、
ls -1 | egrep -v "^file1$|^filename2$|^f1le$" # | xargs rm -r
繰り返しますが、最初に結果を見てから、ハッシュ記号を削除します。
このバージョン-コメントで示唆されているように-いくつかの文字を保存し、少し明確に見えます。
ls -1 | egrep -v "^(file1|filename2|f1le)$" # | xargs rm -r
a
、b
およびa b
最初のプログラムは削除されます-あなたはgrepの部分にABを置く場合:"^[ab]$"
a
とb
ではなくa b
、単にあなたの意図に反対しました。2番目のコマンドも同じことを行います。そして3番目も。非常にまれな例外を除き、スクリプトで「ls」を使用しないでください。しないでください。
遠ざけたいファイルを移動します。1レベル上に移動し、フォルダーを削除します。フォルダーを再作成し、それらのファイルを元に戻します。
/
か?あまり実用的ではありません。c)あなたのファイルをすべて削除しようとすることは、$HOME
実際的でもありません。
これは、OSX / MacOSログアウトフック用の.shスクリプトとして設定したもので、十分に機能します。
#! /bin/bash
for dir in /PathToFolder/*
do
if [ ! "$dir" = "/PathToFolder/FolderToKeep1" ] && [ ! "$dir" = "/PathToFolder/FolderToKeep2" ] && [ ! "$dir" = "/PathToFolder/FolderToKeep3" ] && [ ! "$dir" = "/PathToFolder/FolderToKeep4" ] && [ ! "$dir" = "/PathToFolder/FolderToKeep5" ] && [ ! "$dir" = "/PathToFolder/FolderToKeep6" ] ; then
echo ${dir}
sudo rm -R $dir user
dscl . -delete $dir
fi
done
exit 0
GNU-findでは、-deleteスイッチを使用できます。これは、空の場合もディレクトリを削除します。
find tmp -not -name X -not -name Y -not -name Z -delete
find tmp -maxdepth 1 -not -name X -not -name Y -not -name Z -delete
これを回避する1つの方法です。
tmp
がなかった場合も同様に削除されます。注GNUの標準的な同等として(もGNUの拡張である)X
Y
Z
!
-not
-delete