공백이 포함된 파일 이름을 "zip"으로 전달하려면 어떻게 해야 합니까?

공백이 포함된 파일 이름을 "zip"으로 전달하려면 어떻게 해야 합니까?

이것은 매우 간단한 작업처럼 느껴지지만 제대로 작동할 수는 없습니다. 디렉토리의 처음 13개 파일을 아카이브에 넣고 싶습니다 .zip. 이를 수행하는 확실한 방법은

    zip first13.zip $(ls | head -n 13)

그러나 일부 파일 이름(어리석은 제도적 이유로 변경할 수 없음)에 공백이 있기 때문에 실패합니다. 다음 ls으로 바꾸는 것은 도움이 되지 않습니다. (어쨌든 리터럴 문자로 시작하고 끝나는 파일을 찾게 되지만 여전히 공백을 구문 분석하기 때문에 ls --quoting-style=shell-always상황이 더 악화됩니다 ...) 둘 다 도움이 되지 않습니다.zip'

    ls | head -n 13 | xargs zip first13.zip

이번에도 zip공백이 구문 분석됩니다.

이상하게도 zip all.zip ./*잘 작동하고 너무 명확해요일부zsh일종의 이스케이프가 가능하지만 와일드카드에 있는 항목을 복사하는 방법을 모르겠습니다 .

여러 버전이 있는 경우 zip내 버전은 공식 Arch Linux 패키지에 있는 버전이며 zipCopyright (c) 1990-2008 Info-ZIP버전 zsh은 5.8입니다.

답변1

을(를) 사용하고 있으므로 zsh사용할 수 있어야 합니다.글로벌 예선[m,n]일치 범위를 선택하는 형식 - head파이프(및 암시적 공백 분할)를 완전히 방지합니다.

zip first13.zip ./*([1,13])

man zshexpn자세한 내용은 다음을 참조하세요.

관련 정보