현재 다음 문제로 어려움을 겪고 있습니다.
macOS에서 bash 셸을 사용하여 이름에 고정 부분과 가변 부분이 포함된 zip 파일(고정 부분은 "satori-export")을 다운로드 디렉터리에서 검색한 다음 파일의 압축을 풀고 싶습니다. 완전한 *nix 초보자로서 저는 CLI를 사용하여 이를 달성하는 방법을 알아냈습니다. (추악하고 비효율적이거나 잘못된 명령줄 사용으로 인해 눈물이 나는 점 미리 사과드립니다.)
ls ~/Downloads | grep "satori-export" | sed 's/^/~\/Downloads\//' | xargs unzip
또는 대안적으로
ls ~/Downloads | grep "satori-export" | sed 's/^/~\/Downloads\//' | xargs -I "archive" unzip "archive"
그러나 이러한 명령을 실행하면 다음과 같은 결과가 출력됩니다.
unzip: cannot find or open ~/Downloads/satori-export-2517846752133086875-68d79887-0c61-43eb-a4ea-750a934a6121.zip, ~/Downloads/satori-export-2517846752133086875-68d79887-0c61-43eb-a4ea-750a934a6121.zip.zip or ~/Downloads/satori-export-2517846752133086875-68d79887-0c61-43eb-a4ea-750a934a6121.zip.ZIP.
이상한 점은 파일 자체를 직접 입력으로 사용하여 unzip 명령을 직접 실행할 때(보시다시피 위의 압축 풀기 실패 메시지에서 처음 참조된 파일 이름과 정확히 동일한 경로 및 이름을 사용함) 다음을 사용한다는 것입니다.
unzip ~/Downloads/satori-export-2517846752133086875-68d79887-0c61-43eb-a4ea-750a934a6121.zip
불만 사항이나 문제 없이 unzip을 통해 파일 보관이 계속 해제됩니다. 그러면 파이프라인 명령 체인에 압축 해제 오류가 나타나는 이유가 약간 혼란스럽습니다.
답변1
문제는 xargs
확장되지 않는다는 것입니다 ~
. 명령줄에서 명령을 실행할 때 셸이 이를 수행하지만 파이프라인에는 도움이 되지 않습니다. 따라서 unzip
이름이 지정된 파일 ~/Downloads/satori-export-2517846752133086875-68d79887-0c61-43eb-a4ea-750a934a6121.zip
이나 오류 메시지에 표시된 변형 중 하나를 찾으면 ~
포함 디렉터리는 물론이고 현재 디렉터리에 지정된 디렉터리도 없기 때문에 Downloads/satori-export-2517846752133086875-68d79887-0c61-43eb-a4ea-750a934a6121.zip
실패합니다 .
이것은 작동합니다:
find ~/Downloads -maxdepth 1 -name "*satori-export*" -exec unzip {} \;
~/Downloads
이는 name 에 포함된 모든 파일을 찾아 한 번에 하나씩 실행합니다(인수에서 첫 번째 파일 이름만 처리할 아카이브 이름으로 간주되고 나머지는 파일 이름으로 해석되므로 여기서 중요 satori-export
합니다 . )의 아카이브 검색.unzip
unzip