특정 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
fileA
tar가 각각 두 번 이상 업데이트된 파일 만 포함하도록 하는 방법이 있습니까 ?
편집하다:저는 특히 tar의 GNU 확장을 포함하지 않는 솔루션을 찾고 있습니다(예: 다음과 같이 사용할 수 있음).타르 흡수 없음).
답변1
find test -newer fileA
test
디렉토리와 그 안에 있는 개별 파일을 찾았으므로 (및 해당 내용 모두), 및 를 tar
추가합니다 .test
test/fileB
test/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 find
및 tar
) 또는
find test -type f -newer fileA -exec tar cvf - {} + > test.tar
(보관할 파일이 너무 많지 않다고 가정).
답변2
다음과 같이 시도해 볼 수 있습니다.
tar --newer=fileA cvf test.tar test