tar圧縮後のディレクトリの削除

tar圧縮後のディレクトリの削除

私はディレクトリツリー全体を圧縮しようとしましたが、findで見つけたすべてのディレクトリの代わりに1つの.tar.bz2ファイルだけを残しました。目的は、毎週このタスクを実行するためのcronjobを作成することです。

zipにディレクトリを一覧表示するために正常に使用されたコマンドは次のとおりです。

find rootDirectory/ -mindepth 2  -type d  -not -name '*.bz2'

タスク全体を圧縮して実行するために使用することは次のとおりです。

find rootDirectory/ -mindepth 2  -type d  -not -name '*.bz2' -exec  tar --remove-files -cjf ./{}.tar.bz2 ./{}  \ ;

うまくいきますが、次のように圧縮された各ディレクトリに対してエラーが発生します。

find: ‘rootDirectory/directory2/02-09-2020-183833-700’: No such file or directory

rootDirectory/directory2/02-09-2020-183833-700.tar.bz2で目的の結果を得ましたが、実行中にエラーを削除したいと思います。私は何が間違っていましたか? 。

よろしくお願いします!

ベストアンサー1

私はアーカイブが作成された後に--remove-filesソースディレクトリが削除されたと仮定します。tarユーティリティfindはディレクトリが消えたことを知らず、検索条件に一致する他のコンテンツを見つけるためにディレクトリに入ろうとします。

この方法でアーカイブを生成するディレクトリを入力したくない場合は、コマンドの--prune最後に次のように追加しますfind

find rootDirectory/ -mindepth 2  -type d  ! -name '*.bz2' \
    -exec  tar --remove-files -cjf {}.tar.bz2 {}  \; --prune

主な--pruneガイドラインfindは、調査対象のパスからその検索パスを削除して、そのディレクトリ(もはや存在しない)に入ろうとしないようにすることです。

この場合は でfind生成するので、おそらくそうする必要はありません。これはループを使用して簡単に実行できます。tarrootDirectory

for dir in rootDirectory/*/*/; do
    tar --remove-files -cj -f "${dir%/}.tar.bz2" "$dir"
done

ここで唯一の違いは、隠された名前のディレクトリを見逃すことです。

おすすめ記事