Nice programing

모든 하위 디렉토리에서 특정 파일 유형을 tar하는 방법은 무엇입니까?

nicepro 2020. 11. 17. 21:07
반응형

모든 하위 디렉토리에서 특정 파일 유형을 tar하는 방법은 무엇입니까?


tar와 모든 .php 및 .html 파일을 디렉토리와 하위 디렉토리에두고 싶습니다. 내가 사용한다면

tar -cf my_archive *

내가 원하지 않는 모든 파일을 tars합니다. 내가 사용한다면

tar -cf my_archive *.php *.html

하위 디렉터리를 무시합니다. 재귀 적으로 tar를 만들지 만 두 가지 유형의 파일 만 포함하려면 어떻게해야합니까?


find ./someDir -name "*.php" -o -name "*.html" | tar -cf my_archive -T -


한 가지 방법은 다음과 같습니다.

tar -cf my_archive.tar $( find -name "*.php" -or -name "*.html" )

그러나이 방법에는 몇 가지주의 사항이 있습니다.

  1. 공백이있는 파일이나 디렉토리가 있으면 실패합니다.
  2. 파일이 너무 많아 최대 명령 줄 길이가 꽉 차면 실패합니다.

이에 대한 해결 방법은 find 명령의 내용을 파일로 출력 한 다음 "-T, --files-from FILE"옵션을 사용하여 tar에 사용하는 것입니다.


패턴이 다른 여러 파일을 압축하려면 다음과 같이 공백으로 분리하고 모두 gz 파일에 추가 할 수 있습니다.

tar -czvf deploy.tar.gz **/Alice*.yml **/Bob*.json

그러면 모든 하위 디렉토리에서 Alice로 시작하는 모든 .yml 파일이 추가되고 모든 하위 디렉토리에서 Bob으로 시작하는 모든 .json 파일이 추가됩니다.


이것은 공백이있는 경로를 처리합니다.

find ./ -type f -name "*.php" -o -name "*.html" -exec tar uvf myarchives.tar {} +

파일에 넣어

find . \( -name "*.php" -o -name "*.html" \) -print > files.txt

그런 다음 파일을 tar에 대한 입력으로 사용하고 사용하는 tar 버전에 따라 -I 또는 -T를 사용하십시오.

h를 사용하여 심볼릭 링크 복사

tar cfh my.tar -I files.txt 

find ./ -type f -name "*.php" -o -name "*.html" -printf '%P\n' |xargs tar -I 'pigz -9' -cf target.tgz

멀티 코어 또는 단일 코어의 경우 :

find ./ -type f -name "*.php" -o -name "*.html" -printf '%P\n' |xargs tar -czf target.tgz


tar -cf my_archive `find ./ | grep '.php\|.html'`

"find"및 "grep"을 사용하여 모든 디렉토리 및 하위 디렉토리에있는 .php 및 .html 파일의 모든 경로를 가져옵니다. 그런 다음 압축 할 경로 정보를 tar에 전달합니다.

`및 '기호에주의하십시오. 이것은 다른 답변과 달리 쉘이 명령 줄에서 허용하는 문자 수의 제한에 도달합니다.

참고 URL : https://stackoverflow.com/questions/18731603/how-to-tar-certain-file-types-in-all-subdirectories

반응형