アーカイブ中に作成されたディレクトリ構造があります。アーカイブシステムは変更できません。重複ディレクトリが発生するたびに、アーカイバはディレクトリ名に整数サフィックスを追加します。私の目標は、名前ごとに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
出力をパイピングしようとしましたが、rsync
a)これを達成する正規表現と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
確認されるまでコメントアウト)