정규식을 사용하여 TAR 아카이브에서 파일을 제외시키는 방법은 무엇입니까?


10

간단한 질문이 있지만 답을 찾거나 해결할 수 없습니다. tar 아카이브를 만들고 싶지만 정규식을 사용하여 일부 파일을 제외 시키려고합니다.

제외 할 파일의 예는 다음과 같습니다. 68x640X480.jpg

나는 이것을 운없이 시도했다.

tar cvf test.tar --exclude=[0-9]+x[0-9X]+\.jpg /data/foto

아무도 도와 줄 수 있습니까?

답변:


11

당신은 같은 몇 가지 추가 도구를 사용할 수 있습니다 find및 egrep:

find directory/ -type f -print | egrep -v '[0-9]+x[0-9X]+\.jpg' | tar cvfz directory.tar.gz -T -

위에서 언급 한 방법의 단점은 가능한 모든 파일 이름에 대해 작동하지 않는다는 것입니다. 또 다른 기회는 다음과 같은 내장 제외 기능을 사용하는 것입니다 tar.

tar -czvf directory.tar.gz --exclude='*x*X*.jpg' directory

불행하게도 두 번째 방법은 정규식에서는 작동하지 않지만 와일드 카드에서만 작동합니다.


고마워, 이것이 내가 찾던 것입니다. 어떤 파일 이름이 작동하지 않는지 메모 해주세요. 예를 들어 어떤 문자를 포함?
— Frodik

당신은 그것에 대해 너무 걱정하지 않아도됩니다-대부분의 파일 이름은 해당 솔루션과 완벽하게 작동합니다. 문제는 UNIX / Linux 파일 이름에 제어 문자까지 거의 모든 것을 포함 할 수 있다는 것입니다. 이러한 모호한 조합은 첫 번째 솔루션에서 작동하지 않습니다.
— Vladimir Blaskov

좋은는 유닉스 / 리눅스 / POSIX 파일 이름에 관련된 읽기 : dwheeler.com/essays/fixing-unix-linux-filenames.html
— 블라디미르 Blaskov을

0

어쩌면 당신은 cpio 를 시도해야

http://cybertiggyr.com/cpio-howto

파일 목록에서 읽고 아카이브를 수행합니다. 아래와 같이 sed를 사용하여 파일 목록을 생성 할 수 있습니다 .

ls |sed   '/[0-9]*x[0-9]*X.*/d' >/tmp/files

그런 다음이를 cpio의 입력으로 사용할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.