定期的に実行するいくつかのファイル管理タスクを自動化しようとしています。 「./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
コピー/削除を防ぐには、同じファイルシステムに保存する必要があります。