ファイルの各行ごとにカウンタ変数を一意にする方法

ファイルの各行ごとにカウンタ変数を一意にする方法

したがって、同じファイルを持つ2つのディレクトリがあります。ただし、ディレクトリaには今日のデータがあり、ディレクトリbには昨日のデータがあります。私が望むのは、ファイルを比較して結果を3つの列に出力することです。これはファイル名、ファイルが同じかどうか、ファイルが同じ日数です。

私が今まで持っているのは次のとおりです。

ls ./dropzone_current > files.txt

is_identical=false


filename="files.txt"
while read -r line
do
    name="$line"
    declare -i counter 
    diff -qs ./dropzone_current/$name ./dropzone_backup/$name
    if [ $? -ne 0 ]
    then
    is_identical=false
    counter=0
    printf '%s\t%s\t%s\n' "$name" "$is_identical" "$counter" >> test.txt

    else
    counter=$((counter + 1))
    is_identical=true
    printf '%s\t%s\t%s\n' "$name" "$is_identical" "$counter" >> test.txt
    fi


done < "$filename"

デフォルトでは、カウンターを除くすべてがうまく機能します。比較される各ファイル名に対してカウンタは一意である必要があり、スクリプトが実行されるたびに(1日に1回)更新される必要がありますが、これを行う方法はわかりません。

ベストアンサー1

私の他の答えとあなたの質問に対する意見に基づいて、あなたが実際に探しているのは、ファイルセットの変更を追跡する方法のようです。これはしばしばバージョン(または改訂)制御と呼ばれます。一般的にシステムにインストールされている一般的なエンジンの一つはgit

これを達成するには、ファイルのコピーを保存し、その中のすべての変更を追跡する「ストレージ」を保存する場所を選択してください。私たちはこれを場所と呼びます/path/to/repository。ディレクトリを作成してコマンドを実行しますgit init。これでリポジトリが設定されます。ファイルをディレクトリにコピーすると、現在の状態をリポジトリに「コミット」します。

git add *
git commit -m "Initial commit of files"

その後、転送場所を確認し、必要に応じてリポジトリを更新できます。

#!/bin/bash
repo='/path/to/repository'
dropbox='/path/to/delivery/'

cd $repo
for file in *; do
    if ! diff "${repo}/$file" "${dropbox}/$file"; then
        cp -p "${dropbox}/$file" ${repo}/
        git add "$file"
    fi
done
git commit -m "Update for $(date)"

これは、名前にスペースが含まれているファイルやフィードに追加または削除されたファイルを処理しない高速で汚れたスクリプトですが、これは開始点です。

おすすめ記事