[linux] 모든 하위 디렉토리에서 특정 파일 유형을 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 -


답변

bash버전> 4.0을 사용하는 경우 다음 shopt -s globstar과 같은 짧은 작업을 수행 할 수 있습니다 .

shopt -s globstar; tar -czvf deploy.tar.gz **/Alice*.yml **/Bob*.json

이렇게하면 임의의 하위 디렉터리에서 Alice로 시작하는 모든 .yml 파일이 추가되고 임의의 하위 디렉터리에서 Bob으로 시작하는 모든 .json 파일이 추가됩니다.


답변

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

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

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

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

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


답변

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

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에 전달합니다.

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