*.html
특정 유형의 모든 파일을 해당 위치에서 압축하고 압축을 풀어야 합니다. 압축을 풀기 위해 다음 명령을 사용했는데 제게는 효과가 있는 것 같았습니다.
find dir -name "*.html.tar.gz" -exec tar -xvzf {} \;
나는 *.htmp.tar.gz
각각의 디렉토리에서 그것을 볼 수 있습니다.
압축을 위해 다음 명령을 실행하려고 하는데 find의 인수 연결이 발생하지 않기 때문에 작동하지 않습니다.
find dir -name "*.html" -exec tar -cvzf {}.tar.gz {} \;
솔루션을 제안하고 스트레스 감소 솔루션이 완벽한지 알려주세요.
편집: 내가 지금 사용하고 있는 것은 대상 이름이 필요하지 않지만 그것이 전혀 불가능한지 gunzip
궁금합니다 . tar
따라서 원래의 문제를 해결하는 답변을 기다리고 있습니다.
fork()
편집: 요구 사항은 C 함수 와 명령을 통해 실행해야 하는 명령을 갖는 것입니다 . exec()
그래서 저는 파이프라인이 가능하다고 생각하지 않습니다.
편집: 또한 압축에 가능한 한 적은 시간이 걸리기를 원하므로 효율적인 방법을 찾고 있습니다.
답변1
find . -name '*.html' -type f -exec sh -c '
for file do tar czf "$file.tar.gz" "$file"; done' sh {} +
C에서:
execlp("find", "find", ".", "-name", "*.html", "-type", "f", "-exec",
"sh", "-c", "for file do tar czf \"$file.tar.gz\" \"$file\"; done",
"sh", "{}", "+", 0);
호출자에게 실패 또는 보관 프로세스를 보고하려면 다음과 같이 개선할 수 있습니다.
find . -name '*.html' -type f -exec sh -c '
ok=true
for file do
tar czf "$file.tar.gz" "$file" || ok=false
done
"$ok"' sh {} +
의 -exec cmd {} +
경우 find
명령을 실행하기 위해 생성된 프로세스가 0이 아닌 종료 상태로 반환되면 0이 아닌 종료 상태로 종료됩니다.
답변2
xargs
이를 달성하려면 다음 방법을 사용해야 합니다 .
find "dir" -name "*.html" -print0 | xargs -0 -n1 -I % tar zcpf %.tar.gz %
파일 이름의 거의 모든 특수 문자를 처리합니다.