将目录中的每个文件压缩到它自己的压缩文件中

如何将目录中的每个文件压缩到自己的tar中,同时保留每个文件的名称?

即file1.out file2.out

– >

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

    将每个文件放入单独的tar文件在这种情况下没有任何意义。 你可以使用gzip直接压缩它们:

     gzip * 

    会导致file1.out.gzfile2.out.gz

    只有在需要将压缩存档作为单个文件的情况下才能使用tar

    如果你不需要每个文件的tar档案,你可以像这样创build它:

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

    要build立在@ SvenW的答案(这将只适用于当前目录),如果你有大量的文件或想要在recursion目录结构上做,你也可以使用

     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