Answers:
在这种情况下,将每个文件放入单独的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 {} \;