Backup

列出所有存在於 backup2.tar.bz2 但不存在於 backup1.tar.bz2 中的文件

  • November 1, 2019

這列出了兩個備份中的所有文件,按大小排序:

tar tvf backup1.tar.bz2 |sort -k3 -n >backup1_files.txt
tar tvf backup2.tar.bz2 |sort -k3 -n >backup2_files.txt

我想列出所有存在於 backup2.tar.bz2 但不存在於 backup1.tar.bz2 中的文件,按大小排序。

這該怎麼做?


注意:

如果你有 AWK,你可以像這樣使用一個襯裡:

awk '{if (NR==FNR) { arr[$6]=1 } else { if (! arr[$6]) { print } } }' backup2_files.txt backup1_files.txt

這將使用備份 2 的文件名建構一個 AWK 數組,然後檢查該數組中是否存在備份 1 的文件名。如果沒有,它將列印它們。

編輯:這是一個改進的版本,它對名稱中帶有空格的文件更加健壯,並且不需要任何臨時文件:

awk '{ key=""; for (i = 6; i <= NF; i++) { key=col_cat $i }; if (NR == FNR) { arr[key]=1 } else { if (! arr[key]) { print } } }' <(tar tvf backup2.tar.bz2 |sort -k3 -n) <(tar tvf backup1.tar.bz2 |sort -k3 -n)

您可以將 awk 程式碼寫入文件intersect.awk中,然後像這樣重複使用它:

awk -f intersect.awk <(tar tvf backup2.tar.bz2 |sort -k3 -n) <(tar tvf backup1.tar.bz2 |sort -k3 -n)

引用自:https://unix.stackexchange.com/questions/549811