サフィックスに基づくディレクトリのマージ

サフィックスに基づくディレクトリのマージ

アーカイブ中に作成されたディレクトリ構造があります。アーカイブシステムは変更できません。重複ディレクトリが発生するたびに、アーカイバはディレクトリ名に整数サフィックスを追加します。私の目標は、名前ごとに1つのディレクトリだけがあり(接尾辞なし)、サブディレクトリがマージされるようにこれらのディレクトリを縮小することです。

# Current Structure
/
+-- Folder_Name/
    +-- 20170913/
        +-- File One
+-- Folder_Name_1/
    +-- 20170913/
        +-- File One
        +-- File Two
+-- Folder_Name_2/
    +-- 20170915/
        +-- File Three
+-- Folder_Name_3/
    +-- 20170918/
        +-- File Four

# What I would like to achieve
/
+-- Folder_Name/
    +-- 20170913/
        +-- File One
        +-- File Two
    +-- 20170915/
        +-- File Three
    +-- 20170918/
        +-- File Four

アーカイブ中に多数のフォルダが作成され(すべての画像の毎月のバックアップを保存する超音波マシンです)、レプリカが作成されることがよくあります。同時に、ImageMagickを使用してビットマップファイルをpngに変換してファイルサイズを縮小します。

これを行うために--remove-source-filesオプションを試しましたが、rsyncこれらのディレクトリを一致させる方法が見つかりませんでしたrsync (正規表現をサポートしていないようです)。その後、find出力をパイピングしようとしましたが、rsynca)これを達成する正規表現とb)サフィックスの有無にかかわらず、ディレクトリ名を提供する方法を理解できませんでした。これには変数を使用する必要があるようですが、シェルスクリプトの経験はありません。

私はここで正しいアプローチを取っていますか?それでは、誰かが設定プロセスを案内できるリソースやチュートリアルを教えてもらえますか?そうでない場合は、どのツールの使用を検討する必要がありますか?

答え1

私はとても簡単だと確信しています

cp -R Folder_Name_*/* Folder_Name

すべてのマージが自動的に行われます。結果を確認したら、元のディレクトリを削除できます。

マージするフォルダが複数ある場合は、forそのフォルダの周りにループを作成します。

for folder in *_1; do
  folder="${folder%_*}"
  cp -R "$folder"_* "$folder"
  # rm -rf "$folder"_*
done

rm確認されるまでコメントアウト)

関連情報