複数の入れ子になったフォルダを含む大容量ファイル構造があります。特定の名前で各フォルダをtar + gzipに圧縮し、元のフォルダを削除したいと思います。
この例では、スクリプトが次に終わるすべてのフォルダを検出し、.abc
そのフォルダをtar + gzipで圧縮して元のフォルダを削除し、.gzを保持するようにします。
Main Folder/
Project 1/
Prj1FolderA.abc/
...lots of tiny files and maybe subfolders...
Prj1FolderB.abc/
...lots of tiny files and maybe subfolders...
Prj1FolderC.abc/
...lots of tiny files and maybe subfolders...
Project 2/
Prj2FolderA.abc/
...lots of tiny files and maybe subfolders...
Prj2FolderB.abc/
...lots of tiny files and maybe subfolders...
Prj2FolderC.abc/
...lots of tiny files and maybe subfolders...
Project 3/
Prj3FolderA.abc/
...lots of tiny files and maybe subfolders...
Prj3FolderB.abc/
...lots of tiny files and maybe subfolders...
Prj3FolderC.abc/
...lots of tiny files and maybe subfolders...
Project 4/
Another Folder Inside/
Prj4FolderA.abc/
...lots of tiny files and maybe subfolders...
Prj4FolderB.abc/
...lots of tiny files and maybe subfolders...
Prj4FolderC.abc/
...lots of tiny files and maybe subfolders...
このスクリプトを実行した後、フォルダを次のように作成したいと思います。
Main Folder/
Project 1/
Prj1FolderA.abc.tar.gz
Prj1FolderB.abc.tar.gz
Prj1FolderC.abc.tar.gz
Project 2/
Prj2FolderA.abc.tar.gz
Prj2FolderB.abc.tar.gz
Prj2FolderC.abc.tar.gz
Project 3/
Prj3FolderA.abc.tar.gz
Prj3FolderB.abc.tar.gz
Prj3FolderC.abc.tar.gz
Project 4/
Another Folder Inside/
Prj4FolderA.abc.tar.gz
Prj4FolderB.abc.tar.gz
Prj4FolderC.abc.tar.gz
これは単なる例であり、フォルダ名は上記とまったく同じではなく、すべて2段階の深さである可能性があります。その間に複数のフォルダがあります。
を使用してこれを行うと仮定していますが、正しい情報を元のフォルダfind
に渡して削除する方法がわかりません。tar
ありがとうございます!
答え1
以下から実行Main Folder
:
find . -type d -name '*.abc' -exec sh -c '
for d; do tar -C "$d" -zcf "$d.tar.gz" . && rm -r "$d"; done
' findsh {} +
私はテストしましたが、あなたもテストしてみることをお勧めします。問題が発生してもデータが失われないように、前にecho
1つを追加してください。rm
内部ループが実行されtar
(成功したrm
場合のみtar
)、 "* .abc"グローバルパターンと一致するサブディレクトリを探します。