내 3TB 외장 하드 드라이브에는 상대적으로 작은 파일이 포함된 2.7TB 디렉토리가 있습니다. 이 2.7TB 디렉토리를 압축하고 삭제하여 압축된 버전만 유지하고 싶습니다. 문제는 애초에 압축되지 zip
않은 디렉터리를 저장할 저장 공간이 충분하지 않다는 것입니다 .rm
이 문제를 해결할 수 있는 방법이 있습니까? 아니면 이 작업을 수행하려면 더 많은 저장 공간을 확보해야 합니까?
답변1
--remove-files
tar 매개변수를 사용해 볼 수 있습니다 . FOO 디렉토리의 모든 내용을 압축한다고 가정하면 다음과 같습니다.
tar -czf FooCompressed.tar.gz --remove-files FOO
매개변수 설명:
- c: TAR 생성
- z: GZIP 압축을 사용합니다.
-j
BZIP2 또는-J
LZMA(xz) 로 전환할 수 있습니다. - f: STDOUT 대신 파일로 출력
- 파일 삭제: 설명이 필요함
답변2
디렉터리의 가장 큰 파일이 300GB(여유 공간) 미만인 경우 가장 쉬운 옵션은 아카이브를 만드는 대신 파일을 개별적으로 압축하는 것입니다.
find directory -type f \! -name '*.xz' -print0 | xargs -0 xz -9
directory
압축되지 않은 모든 파일은 압축 수준 9로 압축됩니다. 이렇게 하면 한 번에 하나의 파일이 확장자 xz
가 추가된 해당 압축 버전으로 대체됩니다 (따라서 가 됩니다 )..xz
foo.txt
foo.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$
(댓글에 제안사항 포함 - 감사합니다!!!)