"xargs"를 통해 "ls"에서 "tar"로 변수 전달

"xargs"를 통해 "ls"에서 "tar"로 변수 전달

나는 다음과 같은 것을하려고 노력하고 있습니다.

ls -t | head -n 3 | xargs -I {} tar -cf t.tar {}

마지막 3개의 수정된 파일을 아카이브하지만 결국 각 파일에 대해 개별적으로 tar 명령을 실행하게 되며 순서에 관계없이 3개의 파일 중 마지막 파일을 포함하는 tar 파일이 남습니다. 나는 "xargs"를 올바르게 사용하지 않는다는 것을 알고 있지만 검색이 도움이 되지 않았습니다. 내가 찾은 몇 가지 예도 작동하지 않습니다. 더욱 간단한 명령

ls | xargs -I {} tar -cf t.tar {}

해당 디렉토리에서 단 하나의 파일만 포함하는 tar 파일이 생성됩니다.

답변1

ls -t | head -n 3 | xargs tar -cf t.tar

나를 위해 작동합니다. 플래그를 설정해야 하는 이유가 있나요 -I?

답변2

~에 따르면이 게시물, 입력이 파쇄되어 마지막 청크만 포함하는 tar 파일을 생성하는 경우 r대신 사용하는 것이 좋습니다 . 따라서 더 나은 해결책은 다음과 같습니다.cxargs

rm -f t.tar 2>/dev/null  # remove tar if there
ls -t | head -n 3 | xargs tar -rf t.tar

관련 정보