명령의 파일 목록이 있습니다 find
. /tar 파일을 압축하고 원본 파일을 삭제하는 방법은 무엇입니까? 결과: find . -type f -exec egrep "mxprod|nlsoprdc" {} /dev/null \;
;파일을 압축하고 원본 파일을 삭제하는 방법은 무엇입니까?
답변1
GNU 도구를 사용하면 다음을 수행할 수 있습니다.
find . -type f -exec grep --null -El 'mxprod|nlsoprdc' {} + |
tar --xz -cf /path/to/file.tar.xz --remove-files --null -T -
특정 용도에 대해서는 이를 포기하고 GNU를 find
사용할 수 있습니다 .grep
-r
grep -r --null -El 'mxprod|nlsoprdc' . |
tar --xz -cf /path/to/file.tar.xz --remove-files --null -T -
발견된 파일이 포함된 디렉터리는 아카이브의 구성원으로 추가되지 않습니다. 아카이브를 추출할 때 다시 생성되지만 원본 메타데이터(소유권, 권한, ACL, 기타 속성...)는 사용되지 않습니다.
다음을 수행하여 이 문제를 해결할 수 있습니다.
grep -r --null -El 'mxprod|nlsoprdc' . |
awk -F/ -v RS='\0' -v ORS='\0' '{
p=""; sep=""
for (i = 1; i < NF; i++) {
p = p sep $i; sep=FS
if (! (p in dirs)) {
print p
dirs[p]
}
}
print}' |
tar --xz -cf /path/to/file.tar.xz --no-recursion --remove-files --null -T -
tar
비어 있지 않기 때문에 삭제할 수 없는 디렉터리에 대한 오류가 표시됩니다 .
그럼에도 불구하고 파일 시스템이 가득 차면 해당 파일을 삭제한 xz
후 해당 파일의 출력이 기록되지 않을 수 있으므로 위험합니다.tar
아카이브가 올바르게 생성되었는지 확인한 후에만 파일 삭제를 시작하는 것이 가장 좋습니다.