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" )
그러나이 방법에는 몇 가지주의 사항이 있습니다.
- 공백이있는 파일이나 디렉토리가 있으면 실패합니다.
- 파일이 너무 많아 최대 명령 줄 길이가 꽉 차면 실패합니다.
이에 대한 해결 방법은 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에 전달합니다.
`및 ‘기호에주의하십시오. 또한 이것은 다른 답변과 달리 쉘이 명령 줄에서 허용하는 문자 수의 한계에 도달합니다.