如何将目录下的每个文件压缩到其自己的 tar 中,同时保留每个文件的名称?
即文件1.out文件2.out
-->
文件1.输出.tar.gz 文件2.输出.tar.gz
答案1
在这种情况下,将每个文件放入单独的 tar 文件中没有任何意义。您可以使用gzip
以下方法直接压缩它们:
gzip *
将导致file1.out.gz
,file2.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