フォルダDocuments
とTARファイルがあるとしますDocuments.tar
。 tarファイルにディレクトリ内の同じファイルが含まれていることをどのように確認できますか?
私にとってより確実な解決策は次のとおりです。
$ tar xvf Documents.tar -C untarDocs
$ diff -r Documents untarDocs
残念ながら、大容量TARファイルの場合は非常に遅いです。他のオプションはありますか?
(または--diff、--compare)を使用すると、tar -dvf Documents.tar
ファイルシステムには存在するがTARファイルにはないファイルを検出できないため、機能しません。 TARファイルにはあるがTARにはないファイルのみを検出します。ファイル。ファイルシステムの例:
$ mkdir new
$ touch new/foo{1..4}
$ tar cvf new.tar new/
$ touch new/bar
$ tar --diff --verbose --file=new.tar #### doesn't detect new/bar #########
$ rm new/foo1
$ tar --diff --verbose --file=new.tar
出力
new/
new/foo2
new/foo3
new/foo4
new/foo1
tar: new/foo1: Warning: Cannot stat: No such file or directory ### works ###
答え1
ファイル名のリストとディレクトリ名のリストのみを比較したい場合は、この-d
オプションは役に立ちません。代わりに、find
ソートされたリストtar -tf
とそれ。
OPの元の例で想定した名前から始めます。
$ tar xvf Documents.tar -C untarDocs
$ diff -r Documents untarDocs
以下は、ファイル名を区別するために提案されたスクリプトです。
#!/bin/sh
MYDIR=$(mktemp -d)
tar tf Documents.tar |sort >$MYDIR/from-tar
find Documents |sort >$MYDIR/from-dir
(cd $MYDIR && diff -r from-tar from-dir)
rm -rf $MYDIR
これは、Documents.tar
同じトップレベルの「Documents」ディレクトリが含まれていると仮定します。これが良い仮定ではない場合は、リストをフィルタリングして最上位ディレクトリの名前を削除する必要があります。しかし、OPはこれが問題になることを示していません。
それにもかかわらず、プログラムがどの順序を使用するかはtar
保証できないため、リストを並べ替える必要があります。find
使ったmktemp
OPはGNU tar(-d
オプション)、これはLinuxで可能です。
もちろん、参照するPOSIX tarはありません-d
。 公園違いはありません。
答え2
標準のtarアーカイブではこれは不可能です。これは、標準のtarアーカイブにディレクトリの内容のリストが含まれていないためです。
star
増分バックアップをアーカイブするために必要なすべてをstarに通知するときに発生する機能強化により、次のように機能します。
1)star -c -dump -C somedir . > /tmp/tarfile
2)star -diff -vv -C comparedir < /tmp/tarfile
このオプションを使用すると、比較されるメタデータの量を減らすことができますdiffopts=
。マニュアルページをご覧ください。