2014-01-15 5 views
1

bash 명령 줄에서 이름이 내 시스템의 특정 패턴과 일치하는 모든 zip 파일을 찾은 다음 내 디렉토리에서 압축을 해제해야합니다.xargs oneliner 파일을 압축 해제합니다.

압축 해제 된 파일을 하위 폴더로 정리하고 싶습니다. 전체 경로를 사용하지 않고 원래 zip 파일 이름을 기반으로 사용자 지정 명명 규칙을 사용하여 하위 폴더 이름을 선택하고 싶습니다.

주기에 대해 이 작동한다는 것을 알고 있습니다. 어쨌든 xargs를 배우는 중이므로 xargs oneliner에서 동일한 작업을 수행 할 수 있는지 알고 싶습니다. 비슷한 :

locate -r "<zipped files regex>" | xargs -i -t "foldername=$(echo {} | sed 's/.*\///'); mkdir -p $folderName; unzip {} -d $folderName" 

나는이 메시지 :

foldername={}; mkdir -p ; unzip {} -d 
xargs: foldername={}; mkdir -p ; unzip {} -d : No such file or directory 

당신이 내가 그것을 작동하도록 도와 드릴까요?

감사합니다.

+0

현재 명령의 문제점은 무엇입니까? 또한 재생성을 위해''예제를 제공 할 수 있습니까? –

+1

Xargs는 모든 것을 하나의 단일 zip 명령으로 전달하며 zip은 한 번에 하나의 zip 파일 만 처리 할 수 ​​있으므로 for 루프 또는'find ... -exec'를 사용해야합니다. –

+0

@SamLaine 좋은 지적이지만'xargs'는'-n' ('--max-args') 옵션을 가지고 있습니다. 여전히'-exec'와 함께'find '를 사용하는 것이 더 간단합니다. –

답변

2

$() 내에있는 echo {} | sed 's/.*\///'은 xargs 이전 및 locate 전에 다른 것보다 먼저 실행됩니다. 그래서 xargs로 이것을하기가 어렵습니다. 사용 xargs를하지 않고 한 가지 방법 :

locate -r [.]zip$ | \ 
    sed 's!.*/\([^/]*\)$!mkdir -p "\1"; unzip -n -d "\1" "&";!' | \ 
    sh 2> ERRORS 
가능성이 향상 가독성과에 대한
+0

나는 sed, 절대적으로 똑똑한 해결책을 위해이 종류의 사용법을 몰랐다! 고마워! –

+0

이것은'sed'를보다 똑똑하고 강력한''xargs''로 효과적으로 만듭니다. – CygnusX1

0

사용 GNU 평행하게 속도 향상 :

locate -r [.]zip$ | parallel "mkdir -p {/.}; cd {/.} && unzip {}" 

시계 빠른 도입을위한 인트로 비디오 : 이 https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

워크 튜토리얼을 통해 (남자 parallel_tutorial). 명령 줄 을 사랑합니다.

관련 문제