파일 내용을 제거하되 이름과 계층 구조는 유지

파일 내용을 제거하되 이름과 계층 구조는 유지

디렉토리 구조를 미러링했지만 파일 내용에는 신경 쓰지 않고 모든 파일의 이름과 구조만 유지하고 싶습니다.

모든 파일(폴더 아님) 내용을 "없음"(널, 1바이트, 빈 문자열 또는 유사)으로 바꾸는 방법은 무엇입니까?

답변1

일반적으로 말하면,

find /top -type f -exec cp /dev/null {} \;

또는 (에 의해요르단):

find /top -type f -exec sh -c '> $1' -- {} \; 

Linux 시스템(또는자르기 명령~에서GNU coreutils 패키지):

find /top -type f -exec truncate -s 0 {} +

답변2

그리고 zsh:

for f (**/*(D.)) : > $f

.D숨겨진 파일과 숨겨진 디렉토리의 파일을 포함하여 일반 파일에 대해서만 이 작업을 수행하십시오 .

작은 파일의 경우 :>**/*(D.).

파일을 동일한 크기로 유지하되 데이터 없이 희소하게 만들려면(희소 파일을 지원하지 않는 Apple의 HFS+ 파일 시스템을 제외하고 디스크 공간을 차지하지 않음):

find . -type f -exec perl -e '
  for (@ARGV) {
    unless (open F, "+<", $_) {warn "open $_: $!"; next}
    unless (seek F, 0, 2) {warn "seek $_: $!"; next}
    $size = tell F;
    unless (truncate F, 0) {warn "zap $_: $!"; next}
    unless (truncate F, $size) {warn "fill $_: $!"; next}
  }' {} +

이들 모두는 파일의 마지막 수정 시간을 업데이트합니다.

답변3

파일의 모든 메타데이터를 보존하려면 다음을 수행하는 것이 좋습니다.

  • 먼저 다음 명령을 사용하여 파일의 메타데이터를 보관합니다.

    star -c -dump -meta $STARTDIR > out.tar

  • 그런 다음 find파일 삭제를 호출하십시오.

Star를 extract사용하면 다음을 호출하여 이러한 tar 아카이브에서 메타데이터를 얻을 수 있습니다.

star -xp -xmeta < out.tar

이렇게 하면 원래 트리와 비슷하지만 모든 일반 파일의 크기가 0인 디렉토리 트리가 생성됩니다.

전화하는 경우:

star -xp -xmeta -force-hole < out.tar

이러한 파일은 용량이 적고 내용이 없지만 파일 크기는 정확합니다.

star소프트웨어 작성자에게 문제를 보고해야 하고 문제가 특정 파일 트리에서만 발생하고 파일 내용을 공개하고 싶지 않은 경우에도 이 접근 방식이 흥미로울 수 있습니다.

답변4

완전성을 위해 bash 버전은 다음과 같습니다.

for f in **; do [ -f "$f" ] && [ ! -L "$f" ] && >"$f"; done

이를 위해서는 globstar옵션( shopt -s globstar)을 활성화해야 하므로 최소한 bash 버전 4가 필요합니다. (그러나 이를 사용하려는 경우 zsh기본 Mac OS X 버전을 고수하고 싶지 않을 수도 있습니다.)

관련 정보