
現在いるディレクトリから 1 つのファイルと 1 つのディレクトリを除くすべてを削除したいです。どうすればいいでしょうか?
3 つのディレクトリ a、b、c と 3 つのファイル 1.php、2.php、3.php があるディレクトリがあります。ディレクトリ a と b、およびファイル 1.php と 2.php のみを削除したいと考えています。これをもっと簡単な方法で行うためのソリューションを探しています。より多くのフォルダーとファイルで、より大規模に使用できるソリューションを探しています。
答え1
find directory -not \( -name temp -o -name 3.php -o -name c -prune \) -delete
簡単なテスト ケースでは、少なくともこのケースでは機能することが示されました。egc
などの名前のサブディレクトリがある場合は、それらも除外できると思います。一般的なケースで機能させるのは簡単ですが、find コマンドを一般性をもって定義するには、ある程度のテストが必要です。
「-delete」ステートメントなしでテストして、どのファイルが一致するかを確認します。
PRESSTOP:が指定されるfind
と動作が変わります(はこれについて警告し、 が指定されると動作しません)。ただし、出力を および にパイプしたり、の代わりにと書き込んだりすることもできます。-delete
find
-prune
xargs
rm
-execdir rm {} \;
-delete
例:
find directory -not \( -name directory -o -name 3.php -o -name c -prune \) -execdir rm -r {} \;
find directory -not \( -name directory -o -name 3.php -o -name c -prune \) -print0 | xargs -0 rm -r
これは常に難しい作業であり、目的がファイルを削除することである場合、広範なテストケースを作成します。私は、同様のfind
s を夜間に実行しているのですが、それらを解放することに不安を感じなかったとは言えません :-)
答え2
私の直感はこうです - 保存するファイルが 1 つだけ、ディレクトリが 1 つだけの場合は、それらを安全な場所にコピーし、残りを消去します。
cp /dir/file.txt /safe/dir/
cp -R /dir/to/save /safe/dir/
rm -rf /dir/
答え3
疑似 Perl で次のスクリプトを試してください。
#request the file you don't want to delete and store the name in a scalar variable.
opendir(DIRHANDLE, ".") || die "Could not open Directory handle.";
@list = readdir(DIRHANDLE);
foreach $name (@list) {
if($name != $your_input_variable) {
unlink($name);} else {
}
}