find 명령으로 생성된 파일 목록이 있습니다. 이를 사용하여 /tar 파일을 압축하고 원본 파일을 삭제하려면 어떻게 해야 합니까?

find 명령으로 생성된 파일 목록이 있습니다. 이를 사용하여 /tar 파일을 압축하고 원본 파일을 삭제하려면 어떻게 해야 합니까?

명령의 파일 목록이 있습니다 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

아카이브가 올바르게 생성되었는지 확인한 후에만 파일 삭제를 시작하는 것이 가장 좋습니다.

관련 정보