見出し画像

AWS経費8割削減! 2つのフォルダから差分だけ取り出す方法

大量のファイルがある時に何が変更になったか、変更になたものだけをサクっと取り出して相手に共有したい!っという時に便利な方を探して意外と手間取ったのでNOTEします。
(表紙はbingで仕事の大変さを表現してもらいました)

ChatGPTはかく語りき

コマンドラインでパパット済ます方法ならChatGPT先生がたちどころに教えてくれるしぃ、っと放置、いざとなったらうまく動作しなくて焦る焦る!

教えていただいた方法ハコチラ

実際に動かすと rsyncでエラーになってしまいました。
更に相談しても右往左往するばかりなので一旦諦めて別の方法を探します。

結論: 

bashだとバグ付きのものしか作れず、聞き方をぐっと狭めてPythonで、と指定してもう一度初めから質問をやりなしたら使えるものが出てきました。

bashではmac,linuxなどで機種依存があるため混乱するようです。

diff_copy.sh

#!/bin/bash

if [ "$#" -ne 3 ]; then
    echo "Usage: $0 <folder_A> <folder_B> <folder_C>"
    exit 1
fi

folder_A="$1"
folder_B="$2"
folder_C="$3"

# フォルダCの中身を削除
rm -r "$folder_C"/*

# フォルダAとフォルダBの間で差分を検出し、diff_files.txtに結果を保存
diff -qr "$folder_A" "$folder_B" > diff_files.txtcat diff_files.txt

# diff_files.txtを読み取り、Only in A の行からファイル名を抽出してフォルダCにコピー

while IFS= read -r line; do
  echo $line
  if [[ $line == "Only in $folder_A"* ]]; then
    file_path=$(echo "$line" | cut -d' ' -f4-)  # ファイル名を取得(スペース区切りの4番目以降)
    cp "$folder_A/$file_path" "$folder_C/"  # ファイルをフォルダCにコピー
    echo "$folder_A/$file_path"
  fi
done < diff_files.txt

# diff_files.txtを削除
rm diff_files.txt

echo "差分ファイルを$folder_Cにコピーしました。"

と喜んでいたら、うまく動かないケースが。こうなるともう堂々巡り。
ChatGPT先生、これどうしてくれるんですか?!

bashじゃなくても良いです

bashは機種依存の部分も有りChatGPT先生の混乱が止まらなくなったので一旦リセット。 Pythonでもよいですよ?とお願いすると一瞬で作成してくだいました。

プロジェクトによっては外部のツールを使えないケースもあるので、こういう基本的な再発明的なものを作らずにすむのは助かりますね。

ちなみにChatGPT先生はperlもお好きなようで、この状態の前に部分的にperlで処理させることを試みたら、そちらもサクッと書いてくれました。

皆さんAIに対して様々なご意見があるようですが、道具は使いよう、今後も先生について行きます(笑


コスト削減80%!

じつはこれAWSへのアップロード差分ファイルを作成したかったのですが、その後このツールを使ってアップロードを試したところ80%削減!(予定)
これまでズボラにバンバン上げていた何GBものファイルがチョビットになった模様です。反省。。。



この記事が気に入ったらサポートをしてみませんか?