특정 필터링을 사용하여 폴더 구조 압축

특정 필터링을 사용하여 폴더 구조 압축

다음과 같은 폴더 구조가 있습니다.

/foo
/foo/bar
/foo/bar2
/foo/bar3

모든 폴더(포함 /foo)에는 이름이 .txt. 그러나 이러한 파일을 제외 /foo하고 /foo/bar /foo/bar2 등에 파일을 포함하고 싶습니다 .

그러나 이렇게 하면:

tar cvfz foo.tgz --exclude="/foo/*.txt" /foo

.txt. 뿐만 아니라 전체 계층 구조의 모든 파일이 누락되었습니다 /foo.

누구든지 이것을 달성하는 방법을 알고 있습니까?

답변1

--excludeglob 스타일 패턴만 허용하는 것처럼 보이기 때문에 tar만 사용하여 이 작업을 수행할 수 있는지 확실하지 않습니다 . 그러나 find를 사용하여 파일 목록을 얻은 다음 정규 표현식을 사용하는 grep을 사용하여 해당 파일을 필터링할 수 있습니다.

find foo -type f -print0 | grep -z -v '^foo/[^/]*.txt$' | tar cvf foo.tgz --null -T -

옵션 -print0-z--null해당 명령이 레코드(파일 이름)를 구분하기 위해 줄 바꿈 대신 널 바이트를 사용함을 나타냅니다. 일부 파일에는 예기치 않은 문자가 포함될 수 있으므로 이는 좋은 습관입니다.

관련 정보