Linux 환경에서 두 가지 관련 질문이 있습니다.
\
별표 "*"와 함께 백슬래시를 사용해야 할 때 혼란스럽습니다 . Unzip *.zip을 실행하려고 하면 탈출할 때까지 명령이 실패합니다. 왜 그럴까요?
developer@tz:~/f$ bash -version
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
developer@tz:~/f$ unzip *.zip
Archive: abstract.zip
caution: filename not matched: date-function.zip
developer@tz:~/f$ unzip \*.zip
Archive: abstract.zip
inflating: abstract.xsl
Archive: date-function.zip
warning [date-function.zip]: zipfile is empty
1 archive was successfully processed.
1 archive had warnings but no fatal errors.
developer@tz:~/f$ ls *.zip
abstract.zip date-function.zip
developer@tz:~/f$ ls \*.zip
ls: cannot access '*.zip': No such file or directory
단일 라인 기능에 대한 비슷한 질문입니다.
동일한 디렉토리에 foo.zip과 bar.zip이라는 zip 파일이 있고 그렇게 할 때 두 파일의 압축을 풀어야 한다고 가정해 보겠습니다.
ls *.zip | xargs -IZIP basename -s .zip ZIP
위 명령은 konsole의 foo 및 bar를 나열하지만 실행하면 다음과 같습니다.
ls *.zip | xargs -IZIP unzip ZIP -d $( basename -s .zip ZIP )
기본 결과를 전달할 때 값을 얻지 못해 실패하기 때문에 작동하지 않습니다.
- konsole 명령을 호출할 때 언제 "\"나 "*" 또는 둘의 조합을 사용합니까?
- zip 파일의 압축을 고유한 이름의 디렉터리에 어떻게 풀 수 있나요?
답변1
특히 사용법에 따라 unzip
약간의 혼란이 발생할 수 있습니다. 그것은 불릴 수있다
$ unzip x.zip file-1 file-2 file-3
이 답변 의 나머지 부분 에서는 현재 디렉터리 file-1
에 및 .x.zip
.zip
x.zip
y.zip
*
쉘이 전역 확장( 또는 같은 와일드카드 ?
)을 수행할 때 일치하는 각 파일은 별도의 인수가 됩니다. 그래서
$ unzip *.zip
~이 되다
$ unzip x.zip y.zip
y.zip
이 구문은 "아카이브에서 파일 추출 x.zip
"을 의미한다는 점을 기억하세요. 여러 아카이브를 허용하기 위해 unzip
와일드카드도 처리됩니다. unzip
쉘 대신 와일드카드를 처리 하려면 이를 인용하거나 이스케이프 처리해야 합니다.
$ unzip \*.zip
또는
$ unzip '*.zip'