다음은 발견된 파일 결과를 검색하고 덤프하는 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
옵션 과 결합하는 것입니다)tar
AIX에서아카이브할 경로명이 포함된 목록 파일이 제공됩니다).
find ...as you had... >listfile
tar -cf archive.tar -L listfile
AIX 시스템에 대한 액세스 권한이 없기 때문에 이를 테스트할 수 없습니다.