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

이러한 파일을 두 번 포함하면 GNU는 tar두 번째 파일 세트가 첫 번째 파일 세트와 동일한 inode를 갖기 때문에 하드 링크여야 한다고 인식하고 가정합니다.

두 번 보관합니다.

  1. 먼저 ( 기준을 /mnt/TEST충족하는 ) 아카이브 디렉터리를 통해 ,find
  2. 그런 다음 개별 파일을 다시 보관하십시오.

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).

관련 정보