Linux で 1 つのファイルと 1 つのディレクトリを除くすべてを削除する

Linux で 1 つのファイルと 1 つのディレクトリを除くすべてを削除する

現在いるディレクトリから 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と動作が変わります(はこれについて警告し、 が指定されると動作しません)。ただし、出力を および にパイプしたり、の代わりにと書き込んだりすることもできます。-deletefind-prunexargsrm-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

これは常に難しい作業であり、目的がファイルを削除することである場合、広範なテストケースを作成します。私は、同様のfinds を夜間に実行しているのですが、それらを解放することに不安を感じなかったとは言えません :-)

答え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 {
}
}

関連情報