2つのディレクトリのコンテンツをストリーミングで比較する

2つのディレクトリのコンテンツをストリーミングで比較する

ストリーミングを (1 つのコマンドまたはスクリプトで) タスクにする方法:

  • 2つのディレクトリ dir1 と dir2 の内容 (ファイルとフォルダ) を比較します。
  • dir1 ディレクトリに新しいファイルが表示されたら、それらを dir2 にコピーし、同時にハンドラで処理します。

diff -> コピー -> some.sh を実行

答え1

以下のコマンドを使用して、dir1 の内容を file1.txt にリストします。

ls -ltr | awk '{print $9}'  > /var/tmp/file1.txt

file1.txtにはこのコンテンツが含まれています

t1
1
l.sh
r.txt
l.py
l.txt
p.txt

以下のコマンドを使用して、dir2の内容をfile2.txtにリストします。

ls -ltr | awk '{print $9}' > /var/tmp/file2.txt
t1
1
l.sh
r.txt
l.py
l.txt

このコマンドは、file1.txtと比較してfile2.txtに存在しないコンテンツを見つけて、ディレクトリ2にコピーします。

awk 'NR==FNR {a[$1];next}!($1 in a) {print $1}' file2.txt file1.txt |
awk '{print "cp -rvfp" " " "directory1path”$1 " " "directory2path"}' |
sh

答え2

次の 2 つの方法で実行できます。

  1. ソフトリンクの使用

    このコマンドを使用して、ソースの別のコピーを宛先フォルダに取得します。

    ln -s  source destination
    

    ただし、この場合、ソース ファイルまたはディレクトリが削除されるとリンクが壊れ、アクセスできなくなります。

  2. rsyncの使用

    rsync -avzh sourcepath destinationpath
    

    このコマンドは、ソースと宛先を自動的に同期します。このコマンドが継続的にチェックおよび更新されるように、crontab を 1 分間スケジュールします。

関連情報