将目录中的每个文件压缩为其自己的压缩文件

将目录中的每个文件压缩为其自己的压缩文件

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

即文件1.out文件2.out

-->

文件1.输出.tar.gz 文件2.输出.tar.gz

答案1

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

gzip *

将导致file1.out.gzfile2.out.gz等等。

tar仅当您需要将压缩档案作为单个文件时才使用。

如果你需要每个文件都有一个 tar 存档,你可以像这样创建它:

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

答案2

基于@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

答案3

尝试一下这个:

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

相关内容