약 20K 파일이있는 폴더가 있습니다. 파일은 패턴에 따라 이름이 지정됩니다 ( xy_{\d1,5}_{\d4}\.abc
예 :) xy_12345_1234.abc
. 이 명령을 사용하여 처음 10K를 압축하고 싶었습니다.
ls | sort -n -k1.4,1.9 | head -n10000 | xargs tar -czf xy_0_10000.tar.gz
그러나 결과 파일은 내부에 약 2K 파일 만있었습니다.
ls | sort -n -k1.4,1.9 | head -n10000 | wc -l
그러나 예상대로 10000을 반환합니다.
나는 여기에 기본적인 것을 오해하고있는 것 같습니다 ...
Linux Mint 17.1, GNU tar 1.27.1에서 zsh 5.0.2를 사용하고 있습니다.
편집하다:
@Archemar가 제안한 포크는 결과 파일을 덮어 쓰는 최신 포크와 함께 그럴듯하게 들립니다-파일에는 파일의 '꼬리'가 포함되어 있습니다 -7773 ~ 9999 .
결과 xargs --show-limit
:
Your environment variables take up 3973 bytes
POSIX upper limit on argument length (this system): 2091131
POSIX smallest allowable upper limit on argument length (all systems): 4096
Maximum length of command we could actually use: 2087158
Size of command buffer we are actually using: 131072
교체 -c
로 -r
또는 -u
내 경우에는 작동하지 않았다. 오류 메시지는tar: Cannot update compressed archives
둘 다 사용 -r
하고 -u
유효하지 않으며 실패합니다.tar: You may not specify more than one '-Acdtrux', '--delete' or '--test-label' option
교체 -c
로하는 것은 -a
물론 잘못된 것 같습니다과 같은 실패 tar: You must specify one of the '-Acdtrux', '--delete' or '--test-label' options
내가 문제를 인정 해달라고 불구 azf
하고 Acdtrux
나에게 분리 된 것 같다.
편집 2 :
-T는 좋은 방법처럼 보입니다 . 여기 에서 예제를 찾았 습니다 .
그러나 내가 시도 할 때
ls | sort -n -k1.4,1.9 | head -n10000 | tar -czf xy_0_10000.tar.gz -T -
나는 얻다
tar: option requires an argument -- 'T'
글쎄, 아마도 파일 이름이 tar에 도달하지 않습니까? 하지만 마치 그들이 실행될 때 그렇게 보이기 때문에
ls | sort -n -k1.4,1.9 | head -n10000 | tar --null -czf xy_0_10000.tar.gz -T -
나는 얻다
tar: xy_0_.ab\nxy_1_...<the rest of filenames separated by literal \n>...998.ab
Cannot stat: File name too long
그렇다면 왜 tar가 파일 이름을 보지 못합니까?