디렉토리 구조를 미러링했지만 파일 내용에는 신경 쓰지 않고 모든 파일의 이름과 구조만 유지하고 싶습니다.
모든 파일(폴더 아님) 내용을 "없음"(널, 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 버전을 고수하고 싶지 않을 수도 있습니다.)