ディレクトリのファイルとフォルダ(フォルダの内容を除く)を削除する最良の方法は何ですか? [コピー]

ディレクトリのファイルとフォルダ(フォルダの内容を除く)を削除する最良の方法は何ですか? [コピー]

定期的に実行するいくつかのファイル管理タスクを自動化しようとしています。 「./xfer」フォルダとその内容を除いて、ディレクトリ内のすべてのファイルとフォルダを削除したいと思います。

私はこれを達成するためにfindコマンドを使用しようとしましたが、結果は少し不満です。もっと良い方法がありますか?次のコマンドを実行してテスト環境を設定しました。

mkdir test0{1..5}; find . -type d -exec touch '{}'/test-0{1..5} \;

これが私が作業してきたコマンドです。ところで、私はこれについて少し初めてであり、主に学習練習でこれをしています。また、これはすぐに終了する小さなスクリプトの最後のコマンドになります。

find /some/directory/path/* -type f ! -path "/some/directory/path/xfer/*" -exec rm -fv {} \;; find /some/directory/path/*  -type d ! -path "/some/directory/path/xfer" -exec rm -rfv {} \;

答え1

あなたはそれを使用することができます-prune

find . -path ./xfer -prune -o -exec rm -fv {} \;

ファイルを一覧表示すると、パスが一致すると./xferファイルが削除され、それ以外の場合はrm呼び出されます。

答え2

find ./* -prune ! -path './xfer' -exec rm -fr {} +

より正確です(しかしGNU):

find . -mindepth 1 -maxdepth 1 ! -name 'xfer' -exec rm -fr {} +

または

find . ! -path './xfer' ! -path '.xfer/*' -delete

答え3

forループはどうですか? for i in $(ls|grep -v xfer);do rm -r $i;done

答え4

あなたが望むものではないかもしれませんが、私は通常そのようなことをします。大事にしたいものを取り除きます。

mv dir/keepme tmp/keepme
rm -rf dir/*
mv tmp/keepme dir/keepme

mvコピー/削除を防ぐには、同じファイルシステムに保存する必要があります。

関連情報