2016-09-04 1 views
0

폴더 내 모든 .tgz 파일을 찾은 다음 아카이브에 PDF, EPUB 및 MOBI 파일 만 추출 할 수 있습니다.tar로 파일을 추출하는 동안 와일드 카드로 OR 연산자를 사용하는 방법

find '/home/pi/Downloads/complete/' -type f -name "*.tgz"| while read i ; do tar -xvzf "$i" -C /home/pi/Downloads/complete/ebook/ --strip=1 --wildcards --no-anchored '*.pdf' '*.mobi' '*.epub'; done 

이 코드 줄은 pdf, mobi 또는 epub 중 하나가 아카이브에있는 경우 완벽하게 작동합니다. 그러나이 코드를 사용하면 주어진 아카이브 내에 pdf/epub/mobi가 없을 때마다 아래와 같이 오류가 반환됩니다.

tar: *.pdf: Not found in archive 
tar: *.mobi: Not found in archive 
tar: Exiting with failure status due to previous errors 

이 오류를 방지하는 방법. 다른 스크립트 언어에서 사용할 수있는 'OR'연산자를 여러 와일드 카드에 제공하는 방법이 있어야한다고 생각합니다.

+0

이 http://unix.stackexchange.com 또는 http://superuser.com에 아마 더 주제에,하지만 난이 와일드 카드는 글로브 패턴처럼 작동하며,로 결합 될 수 있다고 생각 것 '--no-anchored \ *. {pdf, mobi, epub}'(그러나 아무 것도 없으면 여전히 오류를보고 할 수 있습니다.) –

답변

3

tar은 (는) 스크립팅 언어가 아닙니다.

그냥 비트 버킷 타르의 표준 오류 리디렉션, 오류 메시지를 숨기려면 당신이 비록 다른 오류를 놓칠 수

tar ... 2> /dev/null 

참고.

안전한 방법은 파일을 먼저 나열하고 추출 할 파일을 선택한 다음 해당 파일이있을 경우에만 수행하는 것입니다.

tar --list -f ...tgz | grep '\.\(pdf\|mobi\|epub\)$' 
+0

응답 해 주셔서 감사합니다. 다음 코드로 시도하지만 모든 파일을 추출 중입니다. 'find '/ home/pi/Downloads/complete /'-type f -name '* .tgz "| 읽는 동안 나는; tar -kxvzf "$ i"-C/home/pi/Downloads/complete/ebook/| grep '\. \ (pdf \ | mobi \ | epub \) $'; done' –

+0

@Ankit : 추출물이 아닌'--list'를 grep해야합니다. – choroba

+0

확인. 모든 아카이브에서 일치하는 파일의 목록을 얻지 만 보관 파일에서 나열된 파일을 추출하는 데 사용 방법을 알지 못합니다. 'find '/ home/pi/Downloads/complete /'-type f -name '* .tgz "| 읽는 동안 나는; tar --list -f "$ i"| grep '\. \ (pdf \ | mobi \ | epub \) $'; done' –

0

@choroba 덕분에 코드가 완벽합니다. 오류가보고되지 않았습니다. 코드를 답변으로 게시하여 다른 사람들이 최종 작업 코드를 더 잘 볼 수 있도록합니다.

find '/home/pi/Downloads/complete/' -type f -name "*.tgz"| while read i ; do tar --list -f "$i" | grep '\.\(pdf\|mobi\|epub\)$' | while read -r line ; do tar -kxvzf "$i" -C "/home/pi/Downloads/complete/ebook/" "$line" --strip=1;done; done; 
관련 문제