제한된 저장 공간으로 원본 디렉터리를 압축하고 삭제합니다.

제한된 저장 공간으로 원본 디렉터리를 압축하고 삭제합니다.

내 3TB 외장 하드 드라이브에는 상대적으로 작은 파일이 포함된 2.7TB 디렉토리가 있습니다. 이 2.7TB 디렉토리를 압축하고 삭제하여 압축된 버전만 유지하고 싶습니다. 문제는 애초에 압축되지 zip않은 디렉터리를 저장할 저장 공간이 충분하지 않다는 것입니다 .rm

이 문제를 해결할 수 있는 방법이 있습니까? 아니면 이 작업을 수행하려면 더 많은 저장 공간을 확보해야 합니까?

답변1

--remove-filestar 매개변수를 사용해 볼 수 있습니다 . FOO 디렉토리의 모든 내용을 압축한다고 가정하면 다음과 같습니다. tar -czf FooCompressed.tar.gz --remove-files FOO

매개변수 설명:

  • c: TAR 생성
  • z: GZIP 압축을 사용합니다. -jBZIP2 또는 -JLZMA(xz) 로 전환할 수 있습니다.
  • f: STDOUT 대신 파일로 출력
  • 파일 삭제: 설명이 필요함

답변2

디렉터리의 가장 큰 파일이 300GB(여유 공간) 미만인 경우 가장 쉬운 옵션은 아카이브를 만드는 대신 파일을 개별적으로 압축하는 것입니다.

find directory -type f \! -name '*.xz' -print0 | xargs -0 xz -9

directory압축되지 않은 모든 파일은 압축 수준 9로 압축됩니다. 이렇게 하면 한 번에 하나의 파일이 확장자 xz가 추가된 해당 압축 버전으로 대체됩니다 (따라서 가 됩니다 )..xzfoo.txtfoo.txt.xz

실제로 이 방법은 사용 가능한 공간보다 작은 파일이 충분히 있는 한 가장 큰 파일이 사용 가능한 공간보다 크더라도 작동합니다. 작은 파일을 먼저 압축하면 (희망적으로)까지 점차적으로 더 많은 공간이 확보됩니다. 가장 큰 파일을 처리할 수 있는 충분한 여유 공간이 있습니다.

답변3

나는 보통 zip 파일을 만들지 않기 때문에 전문가는 아니지만 zip기본적으로 파일을 아카이브에 추가하는 것처럼 보입니다.테스트되지 않은- 명령 포함 rm= 가능위험한- 데이터를 위험에 빠뜨리기 전에 스스로 테스트해 보세요. for f in $(ls --sort=size --reverse); do zip -9 archive.zip $f; rm $f; done 디렉토리에서는 이를 수행하는 것이 가능할 수도 있습니다.

답변4

~/.bashrc에 다음 bash 기능을 추가하세요.

xzd()  { find $1 -type f  \! -name '*.xz' -exec xz -9 {} \; ; }
xzdv() { find $1 -type f  \! -name '*.xz' -print -exec xz -9 {} \; ; }

uxzd() { find $1 -type f  -name '*.xz' -exec unxz -9 {} \; ; }

그런 다음 명령줄에서 다음을 수행할 수 있습니다.

mac@challenger:~/views$ du -sk HelloWorld/
236 HelloWorld/

mac@challenger:~/views$ xzd HelloWorld
mac@challenger:~/views$ du -sk HelloWorld
116 HelloWorld

mac@challenger:~/views$ uxzd HelloWorld
mac@challenger:~/views$ du -sk HelloWorld
236 HelloWorld

xzdv는 xzd의 좀 더 자세한 형태이며 압축 시 각 파일을 에코합니다.

mac@challenger:~/views$ xzdv ./HelloWorld/
./HelloWorld/.cproject
./HelloWorld/src/helloworld.c
...
mac@challenger:~/views$

(댓글에 제안사항 포함 - 감사합니다!!!)

관련 정보