[server] 디렉토리의 모든 파일을 자체 압축 파일로 압축

각 파일의 이름을 유지하면서 디렉토리의 모든 파일을 자체 tar로 압축하는 방법은 무엇입니까?

즉 file1.out file2.out

->

file1.out.tar.gz file2.out.tar.gz



답변

이 시나리오에서는 모든 파일을 별도의 tar 파일에 넣는 것이 의미가 없습니다. gzip직접 압축하는 데 사용할 수 있습니다 .

gzip *

초래 것 file1.out.gz, file2.out.gz등등

tar압축 된 아카이브가 단일 파일로 필요한 경우에만 사용 합니다.

모든 파일에 대해 tar 아카이브가 필요한 경우 다음과 같이 만들 수 있습니다.

for i in *; do tar -czf $i.tar.gz $i; done


답변

@SvenW의 답변을 바탕으로 (현재 디렉토리에서만 작동합니다) 파일 수가 많거나 재귀 디렉토리 구조에서 수행하려는 경우에도 사용할 수 있습니다

find . -type f -exec gzip \{\} \;

출력을 다른 디렉토리 (이 예에서는 ../target)에 넣고 원본을 제거하지 않으려는 경우 다음과 같이 할 수 있습니다.

find . -type f -print | while read fname ; do
    mkdir -p "../target/`dirname \"$fname\"`"
    gzip -c "$fname" > "../target/$fname.gz"
done


답변

이거 한번 해봐:

#!/bin/bash
for fich in *; do
    if [ "$fich" != "*" ] ; then
        gzip -9 -c $fich > $fich.tar.gz
        \mv $fich.tar.gz $fich
    fi
done


답변