아카이브 이름을 폴더 이름으로 사용하여 모든 7z 아카이브를 자체 폴더로 추출하려면 다음 명령을 실행합니다.
7z x "*.7z" -o*
a.7z
예를 들어, 두 개의 파일 과 가 있는 경우 및 b.7z
폴더가 a
생성되며, 여기에는 각각 및의 내용이 포함됩니다(디렉토리 구조 유지).b
a.7z
b.7z
때로는 7z 아카이브가 너무 많아서 여러 코어를 사용하여 이를 추출하고 싶을 때가 있습니다. 나는 이것을 읽었다답변통과아르툠 S.타슈키노프:
7z 압축 해제는 단일 스레드이므로 압축 형식의 제한 사항입니다.
parallel
그래서 제 경우에는 7z 아카이브가 여러 개 있기 때문에 그것을 사용할 생각입니다 .
나는 시도했다:
parallel -j4 '7z x {} -o{}' ::: *.7z
a.7z
그러나 두 파일과 가 있는 예제 로 돌아가면 b.7z
명령은 a.7z
두 파일 sum을 and 대신 sum b.7z
폴더로 추출하려고 시도합니다 a.7z
. 그러면 sum이 이미 가져왔고 파일이기 때문에 실행이 중단됩니다 . 이 문제를 어떻게 해결할 수 있나요? 두 개의 폴더 와 .b.7z
a
b
a.7z
b.7z
a
b
그게 중요하다면 우분투를 사용합니다.
답변1
parallel
{.}
대신 다음을 지정하면 확장이 제거됩니다 {}
.
parallel -j4 '7z x {} -o{.}' ::: *.7z
답변2
*
in 옵션에 대한 참고 사항입니다 -o{dir_path}
. 문서에는 다음과 같은 내용이 나와 있습니다.
{dir_path}
이것은 대상 디렉토리 경로입니다. [...] 7-Zip*
에서 지정 하면 이 문자가 아카이브 이름으로 대체됩니다.{dir_path}
*
초기 명령의 올바른 구문은 다음과 같습니다.
7z x \*.7z -o\*
즉, 두 번째 항목 *
도 이스케이프해야 합니다. 그렇지 않으면 쉘이 이를 확장하려고 시도합니다. bash
해당 옵션을 사용하지 않고 사용할 수도 있습니다 nullglob
. 이것이 작동하는 이유입니다(일치하는 항목을 찾지 못하여 문자 그대로 전달합니다 7z
)...
gnu parallel
이제 명령을 실행하려면 다음을 사용할 수 있습니다 *
(위에서 말했듯이 이스케이프 처리).
parallel -j4 '7z x {} -o\*' ::: *.7z
또는 Stephen's 대답과 같은 대체 문자열을 제거 *
하고 사용하십시오 parallel
.{.}