特定の名前のフォルダを再帰的にtar + gzipに圧縮する方法は?

特定の名前のフォルダを再帰的にtar + gzipに圧縮する方法は?

複数の入れ子になったフォルダを含む大容量ファイル構造があります。特定の名前で各フォルダを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 {} +

私はテストしましたが、あなたもテストしてみることをお勧めします。問題が発生してもデータが失われないように、前にecho1つを追加してください。rm

内部ループが実行されtar(成功したrm場合のみtar)、 "* .abc"グローバルパターンと一致するサブディレクトリを探します。

関連情報