소스 매개변수 압축 해제

소스 매개변수 압축 해제

한 위치에서 다른 위치로 여러 개의 zip 파일을 복사하려면 다음을 수행하세요.

$ cp *.zip destination/

여러 개의 zip 파일을 디렉토리에 압축 해제하려면 다음을 수행하세요.

$ unzip \*.zip -d destination/

man unzip설명하다:

별표 앞의 백슬래시는 Unix에서와 같이 쉘이 와일드카드를 확장할 때만 필요합니다.

나를 혼란스럽게 하는 것은 두 명령이 동일하게 동작하지 않는 것 같다는 것입니다. 왜 그렇지 않습니까? 매번 매뉴얼 페이지를 외우거나 읽지 않고도 각 명령이 어떻게 작동하는지 알거나 추측할 수 있는 방법이 있습니까?

cp대신 여러 소스 매개변수를 가져오도록 구현되었기 때문에 다른가요 unzip? unzip와일드카드가 포함된 문자열을 사용할 수 있습니다. 여러 소스 파일을 사용할 수 없는 이유는 무엇입니까?

소스 매개변수를 얻는 표준 방법은 무엇입니까? cp정말 너무한 걸까요 ?

답변1

두 개의 zip 파일이 있고 해당 파일이 현재 디렉터리에 있는 a.zip경우b.zip

$ cp *.zip destination/

다음으로 확장

$ cp a.zip b.zip destination/

의 의미는 복사하고 대상으로 이동 cp하는 것입니다 .a.zipb.zip

당신이 입력하면

$ cp \*.zip destination/

단지 다음과 같이 "확장"될 뿐입니다.

$ cp '*.zip' destination/

즉, "*.zip"이라는 단일 파일을 대상에 복사하려고 시도하지만 이는 원하는 것이 아닙니다.

반면에 입력하면

$ unzip *.zip -d destination/

다시 확장될 예정

$ unzip a.zip b.zip -d destination/

의미론은 unzip"a.zip" 아카이브에서 "b.zip"이라는 파일을 찾는 것인데, 이는 다시 원하는 것이 아닙니다.

당신이 입력하면

$ unzip \*.zip -d destination/

unzip명령은 단지 이라는 파일의 압축을 풀려고 시도하는 것이 *.zip아니라 .zip.

차이점은 두 명령이 인수를 다르게 해석한다는 것입니다.

답변2

반대로 unzip은 너무 많은 작업을 수행합니다. cp는 파일 이름을 구문 분석할 필요가 없으며 파일 이름을 반복하기만 하면 됩니다.

반면에 Unzip에서는 인수가 와일드카드인지 확인하고 디렉터리 목록을 확인하여 와일드카드와 일치하는 항목을 확인한 다음 이를 반복해야 합니다. 쉘은 이미 와일드카드를 일치시키고 확장할 수 있으므로 압축 해제는 중복되는 기능입니다.

관련 정보