2014-11-13 3 views
8

개별 폴더에 구조화 된 많은 rar 아카이브가 있으며이 파일을 모두 풀어서 스크립트를 작성하고 싶습니다.파일 찾기 및 명령 실행

어떻게해야하는지 알아내는 데 어려움을 겪고 있으며 도움이 필요합니다.

#!/bin/bash 
## For all inodes 
for i in pwd; do 
    ## If it's a directory 
    if [ -d "$i" ] then 
     cd $i 

     ## Find ".rar" file 
     for [f in *.rar]; do 
      ./bin/unrar x "$f" # Run unrar command on filename 
      cd .. 
     done 
    done 
done 

나는 bash 스크립팅에 익숙하지 않아 코드가 두 번 이상 잘못되었다고 가정합니다.

find -name '*.rar' -exec unrar x {} \; 

find가 발견 된 모든 파일에 해당 명령을 실행할 수있는 옵션 exec을 제공 :하지만이 기본 구조

답변

12

당신은 find 명령을 사용할 수 있습니다에게해야 같아요.

+0

'find'는 내가 게시 한 방식으로 너무 많은 열린 파일 오류를 막을 것입니다. 'find foo * ... '와 같이 디렉토리 이름에 glob을 사용했다는 것을 의미합니다. 특정 문제에 대해 질문하십시오. 여기의 질문에 대한 링크를 버리면 나는 거기를 보게 될 것이다. – hek2mgl

+0

문제는 분명히'for ls/var/cpanel/users/';'입니다./var/cpanel/users/*에있는'for i '이어야합니다. – hek2mgl

+0

@Luka 문제는''* .jpg' '입니다. - 따옴표로 묶지 말고,보십시오. 해당 오류를 유발하는 해당 폴더의 모든 jpg 파일로 확장됩니다. 찾으려는 명령은 다음과 같습니다 :'for for i/var/cpanel/users/*; sudo -H -u "$ i" "/ home/$ i/public_html"-type f -name '* .jpg'-execdir jpegoptim {} \을 찾으십시오. ; done' – hek2mgl

5

스크립트가 필요하지 않습니다.

find . -name "*.rar" -exec unrar x {} \; 

또한 검색 결과를 unrar 명령에 전달할 수 있습니다.

find . -name "*.rar" | xargs unrar x