backup2.tar.bz2にはあるがbackup1.tar.bz2にはないすべてのファイルをリストします。

backup2.tar.bz2にはあるがbackup1.tar.bz2にはないすべてのファイルをリストします。

両方のバックアップ内のすべてのファイルがサイズでソートされて一覧表示されます。

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にはないすべてのファイル、サイズでソートされます。

どうすればいいですか?


気づく:

ベストアンサー1

AWKがある場合は、次の1行のコードを使用できます。

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)

おすすめ記事