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回保管してください。
- まず(基準を
/mnt/TEST
満たす)アーカイブディレクトリを介して、find
- その後、個々のファイルを再アーカイブします。
find
一般ファイルのみを検索するようにコマンドを変更する必要があります。
find /mnt/TEST/ -type f -mmin -10 -exec tar -czvf /tmp/test.tar.gz {} +
また、find
コマンドが単一の呼び出しで処理できるよりも多くのファイルを見つけると、複数回呼び出され、tar
毎回tar
tarアーカイブが上書きされます。
この問題を解決してください。
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
)。