tar로 파일을 여러 번 처리하려면 find -newer를 사용하십시오.

tar로 파일을 여러 번 처리하려면 find -newer를 사용하십시오.

특정 file() 보다 새로운 파일 아카이브를 생성하기 위해 tar(1) 을 사용하려고 합니다 fileA. 그러나 find(1)을 사용하여 tar에 전달할 파일 목록을 얻으면 일부 파일이 여러 번 나열됩니다.

$ touch fileA
$ mkdir test
$ touch test/{fileB,fileC}
$ tar -c -v $(find test -newer fileA) > test.tar
test/
test/fileC
test/fileB
test/fileC
test/fileB

xargs(1)를 사용하여 파일 목록을 tar에 전달하면 비슷한 동작이 발생합니다.

$ find test -newer fileA | xargs tar -c -v > test.tar
test/
test/fileC
test/fileB
test/fileC
test/fileB

sort(1) 및 uniq(1)을 사용하여 중복 항목을 제거해도 작동하지 않습니다.

$ find test -newer fileA | sort | uniq | xargs tar -c -v > test.tar
test/
test/fileC
test/fileB
test/fileB
test/fileC

fileAtar가 각각 두 번 이상 업데이트된 파일 만 포함하도록 하는 방법이 있습니까 ?

편집하다:저는 특히 tar의 GNU 확장을 포함하지 않는 솔루션을 찾고 있습니다(예: 다음과 같이 사용할 수 있음).타르 흡수 없음).

답변1

find test -newer fileA

test디렉토리와 그 안에 있는 개별 파일을 찾았으므로 (및 해당 내용 모두), 및 를 tar추가합니다 .testtest/fileBtest/fileC

find이를 방지하려면 다음을 수행하십시오 .

tar -c -v $(find test -type f -newer fileA) > test.tar

이러한 방식으로 명령 대체를 사용하면 문제가 발생할 수 있습니다.예를 들어파일 이름에는 공백이나 와일드카드가 포함되어 있습니다. 이를 방지하려면 다음을 사용하세요.

find test -type f -newer fileA -print0 | tar -c -v --null -T- -f - > test.tar

(GNU findtar) 또는

find test -type f -newer fileA -exec tar cvf - {} + > test.tar

(보관할 파일이 너무 많지 않다고 가정).

답변2

다음과 같이 시도해 볼 수 있습니다.

tar --newer=fileA cvf test.tar test

관련 정보