검색 및 tar 파일은 폴더 구조를 존중합니까?

검색 및 tar 파일은 폴더 구조를 존중합니까?

여러 "날짜" 하위 폴더에서 모든 csv 파일을 검색한 다음 날짜가 파일 수준이 아닌 폴더 수준에만 있으므로 압축하고 구조를 보존하고 싶습니다. 예를 들어 저는

20200101
   A.csv
   B.py
20200102
   G.csv
   D.csv
   F.c

그래서 나도 tar같이 가고 싶어

20200101
   A.csv
20200102
   G.csv
   D.csv

나는 시도했다:

ls 20200*/<some regex>.* | xargs -n1 tar -vczf odlists.tar.gz

하지만 파일은 하나만 저장됩니다!

답변1

xargs -n1각 매개변수에 대한 명령 실행을 나타냅니다. 따라서 tar한 번에 하나의 파일을 저장하면 매번 이전 저장을 덮어쓰게 됩니다.

그렇지 않더라도 -n1명령줄 길이 제한으로 인해 명령이 취약해질 수 있습니다. 모든 매개변수를 동시에 수용할 수 없는 경우 … | xargs tar …호출이 반복되고 각 반복 호출은 이전 매개변수를 덮어씁니다.tar

을 사용하여 하나 이상의 파일을 포함하는 아카이브를 생성한 tar -c다음 반복을 사용하여 해당 파일에 추가할 수 있습니다 tar -r. 처음에는 다양한 옵션을 전달할 수 있는 편리한 방법이 없고, 압축되지 않은 아카이브를 생성한 다음 마지막에 압축해야 하기 때문에 이는 어색합니다.

tar가 이 -T옵션을 지원하는 경우 이를 사용하여 표준 입력으로 파일 이름을 전달할 수 있습니다. 이는 유사 xargs하지만 명령줄 길이 제한이 없습니다.

printf '%s\n' 20200*/*.csv | tar -vczf odlists.tar.gz -T -

또는 tar가 필터링을 지원한다고 가정하면 이를 사용할 수 있습니다.

tar -vczf odlists.tar.gz --exclude='*.' 2020*

관련 정보