場合によっては、コマンドが完了するのを待たずに大量の一時ファイルを再帰的に削除し、ディレクトリ名をリサイクルしたい場合があります。 (たとえば、バージョン管理作業コピーを削除してチェックアウトしたい場合です。)
頻繁には発生しませんが、これが発生した場合は通常、次のコマンドを使用します。
mv "$oldname" dienow && rm -rf dienow &
もちろん、これに関数やエイリアスを作成できますが、そうでない場合は、上記の内容を短く表現する方法はありますか?
ベストアンサー1
私は2つの別々のコマンドを使用します。
mv "$oldname" dienow
rm -rf dienow
これにより、記録から誤って1行を呼び出すと、単一のコマンドを実行して重大なダメージを与える可能性があります。このmv
コマンドは新しいバージョンであっても削除されず、削除することを宣言したものだけが削除されます。"$oldname"
rm
幸運なので、単一のコマンドのみを使用する必要がある場合は、関数として作成してください。
mv_then_rm () {
mv -- "$1" "$1.TO_BE_DELETED" && rm -rf -- "$1.TO_BE_DELETED" &
}
これは、「削除する」ディレクトリがすでに存在しないことを保証する複数の引数バージョンです。
mv_then_rm () {
local d tmpdir tmpdirs
tmpdirs=()
for d; do
tmpdir=$(mktemp -- "$(dirname -- "$d")/.deleting.XXXXXXXXXX")
tmpdirs+=$tmpdir
mv -- "$d" "$tmpdir"
done
rm -rf -- "$tmpdirs" &
}