검색 결과의 파일을 tar 파일로 가져올 수 없습니다

검색 결과의 파일을 tar 파일로 가져올 수 없습니다

다음은 발견된 파일 결과를 검색하고 덤프하는 find 명령입니다./tmp/findall.log

find /app/test -type d  \( -name logs -o -name 'logs*' -o -name 'tmp*' \) -prune -o -print | tee  /tmp/findall.log

다음과 같이 찾기 결과에서 스테이지 폴더를 볼 수 있습니다.

grep stage /tmp/findall.log | more
/app/test/Server2/stage_02032020
/app/test/Server2/stage_02032020/Buyers
/app/test/Server2/stage_02032020/Buyers/BuyersQuote.xlsx
/app/test/Server2/stage_02032020/Buyers/xml

find그런 다음 다음 명령을 사용하여 결과에서 찾은 파일을 압축하기로 결정했습니다.

find /app/test -type d  \( -name logs -o -name 'logs*' -o -name 'tmp*' \) -prune -o  -print0 | xargs -0 tar -cvf /app/test_Backup.tar

그러나 내 tar 파일에는 아래 검색 결과와 같이 스테이지 폴더가 없습니다.

tar -tvf test_Backup.tar | grep stage
No results Found.

찾기 결과의 파일이 tar 파일에서 누락된 이유를 제안해 주시겠습니까?

답변1

빈 문자열 또는 이와 유사한 것이 전달되었음을 "발견"할 수 있습니다. "--no-run-if-empty"를 사용하여 문제를 해결할 수 있으며 그러면 tar가 생성되지 않아야 합니다.

find /app/test -type d  \( -name logs -o -name 'logs*' -o -name 'tmp*' \) -prune -o  -print0 | xargs --no-run-if-empty -0 tar -cvf /app/test_Backup.tar

그런데 귀하의 코드는 내 Raspberry Pi에서 실행됩니다. GNU bash, 버전 4.4.19(1)-릴리스(armv7hl-redhat-linux-gnu)

답변2

find명령이 생성되는 경우많은pathname이면 여러 번 xargs실행될 가능성이 높습니다 tar. 각 실행은 tar마지막 실행에서 생성된 아카이브를 덮어쓰므 로 마지막으로 발견된 파일 배치로 구성된 아카이브가 tar생성됩니다 .find

AIX에 있다고 가정합니다(이전 질문에 태그를 지정했듯이).), 당신이 원하는 것은 아마도 파일에 대한 경로를 쓴 다음 해당 파일을 tar -L listfile( -L옵션 과 결합하는 것입니다)tarAIX에서아카이브할 경로명이 포함된 목록 파일이 제공됩니다).

find ...as you had... >listfile
tar -cf archive.tar -L listfile

AIX 시스템에 대한 액세스 권한이 없기 때문에 이를 테스트할 수 없습니다.

관련 정보