流式比較兩個目錄中的內容

流式比較兩個目錄中的內容

如何將串流(在一個命令或腳本中)作為以下任務:

  • 比較兩個目錄 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

您可以透過兩種方法來完成:

  1. 使用軟連結

    使用此命令在目標資料夾中取得來源的另一個副本

    ln -s  source destination
    

    但在這種情況下,一旦來源檔案或目錄被刪除,連結將被破壞,您將無法存取它。

  2. 使用rsync

    rsync -avzh sourcepath destinationpath
    

    此命令將自動同步來源和目標。為此命令安排 1 分鐘的 crontab,以便它不斷檢查和更新。

相關內容