답변:
이 시나리오에서는 모든 파일을 별도의 tar 파일에 넣는 것이 의미가 없습니다. gzip
직접 압축하는 데 사용할 수 있습니다 .
gzip *
초래 것 file1.out.gz
, file2.out.gz
등등
tar
압축 된 아카이브가 단일 파일로 필요한 경우에만 사용 합니다.
모든 파일에 대해 tar 아카이브가 필요한 경우 다음과 같이 만들 수 있습니다.
for i in *; do tar -czf $i.tar.gz $i; done
find . -maxdepth 1 -type d ! -path . | while read a_dir; do tar -zcvf ${a_dir}.tgz ${a_dir} --remove-files; done
find . -maxdepth 1 -mindepth 1 -type d -exec tar -zcvf {}.tgz {} --remove-files \;
@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
find . -type f -exec gzip {} \;
충분합니다. 두 번째 코드는 공백 등을 포함하는 파일 이름으로 실패합니다.
{}
습관의 힘으로 탈출합니다 ). 그러나 다른 사람들은 이미 귀하의 질문에 대한 답변으로 게시했습니다.
find . -type f -exec grep -Iq . {} \; -and -exec gzip {} \;