여러 "날짜" 하위 폴더에서 모든 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*