tarがリンクを生成する理由

tarがリンクを生成する理由
root@linux:/mnt/TEST# ls
test1.txt  test2.txt  test3.txt
root@linux:/mnt/TEST# find /mnt/TEST/ -mmin -10 -exec  tar -czvf /tmp/test.tar.gz {} +
tar: Removing leading `/' from member names
/mnt/TEST/
/mnt/TEST/test3.txt
/mnt/TEST/test2.txt
/mnt/TEST/test1.txt
tar: Removing leading `/' from hard link targets
/mnt/TEST/test3.txt
/mnt/TEST/test2.txt
/mnt/TEST/test1.txt
root@linux:/mnt/TEST# tar -tvf /tmp/test.tar.gz 
drwxr-xr-x root/root         0 2017-10-08 00:15 mnt/TEST/
-rw-r--r-- root/root         0 2017-10-08 00:15 mnt/TEST/test3.txt
-rw-r--r-- root/root         0 2017-10-08 00:15 mnt/TEST/test2.txt
-rw-r--r-- root/root         0 2017-10-08 00:15 mnt/TEST/test1.txt
hrw-r--r-- root/root         0 2017-10-08 00:15 mnt/TEST/test3.txt link to mnt/TEST/test3.txt
hrw-r--r-- root/root         0 2017-10-08 00:15 mnt/TEST/test2.txt link to mnt/TEST/test2.txt
hrw-r--r-- root/root         0 2017-10-08 00:15 mnt/TEST/test1.txt link to mnt/TEST/test1.txt

ベストアンサー1

これらのファイルを2回含めると、GNUは、2番目のファイルセットが最初のtarファイルセットと同じinodeを持つため、ハードリンクである必要があると認識していると仮定します。

2回保管してください。

  1. まず(基準を/mnt/TEST満たす)アーカイブディレクトリを介して、find
  2. その後、個々のファイルを再アーカイブします。

find一般ファイルのみを検索するようにコマンドを変更する必要があります。

find /mnt/TEST/ -type f -mmin -10 -exec  tar -czvf /tmp/test.tar.gz {} +

また、findコマンドが単一の呼び出しで処理できるよりも多くのファイルを見つけると、複数回呼び出され、tar毎回tartarアーカイブが上書きされます。

この問題を解決してください。

find /mnt/TEST/ -type f -mmin -10 \
    -exec sh -c 'a="/tmp/test.tar.gz"; if [ -f "$a" ]; then tar -uzvf "$a" "$@"; else tar -czvf "$a" "$@"; fi' sh {} +

これは追加アーカイブが存在する場合()ファイルがアーカイブに追加されtar -u、それ以外の場合はアーカイブが作成されます(tar -c)。

おすすめ記事