为一组文件创建单独的档案

为一组文件创建单独的档案

我有一个包含大量文件的目录。我想将特定掩码的每个文件压缩到单独的存档中。如何自动执行此操作?

例如,以下是示例目录内容: - index.html - start.html - myfile1.txt - myfile2.txt - myfile3.txt

如何为每个以“myfile*”开头的文件创建单独的档案(myfile1.tar.gz,myfile2.tar.gz...)?

答案1

如果你使用 bash 它可能看起来像这样

对于 `ls abc_*` 中的文件;执行 tar -czvf $file.tar.gz $file;完成

您只需将“abc_”更改为您的起始文件名。

请注意,它会重新压缩已压缩的文件,因为它们的启动方式与普通文件一样。

谨致问候 Kenny

答案2

我假设你正在使用 GNU coreutils 的 Linux 机器。在 bash 中执行以下操作

find -name "myfile*" -print0 | xargs -n 1 -0 gzip

man find要理解上述命令行,请查看和中的选项man xargs。我认为不需要将单个文件打包成 tar 文件。如果出于某种神秘原因,你确实需要按照上面写的方式打包,请使用类似

find -name "myfile*" -print0 | \
while IFS="" read -r -d $'\0' file
do 
  [ -f "${file%.*}.tar.gz" ] || tar czvf "${file%.*}.tar.gz" "${file}"
done

请参阅中的解释man bash。干杯!

PS:要过滤掉已压缩的文件,请[ "${file##*.}" == "gz" ] ||在覆盖保护之前使用先决条件。

答案3

这会将当前目录中的文件压缩到单独的档案中并删除扩展名。

#!/bin/bash
it=0; for f in *.*; do fn=$(echo "${f%%.*}"); filearray[${it}]="${fn}"; ((it=it+1)); done; total=it; for it in "${filearray[@]}"; do zip "$it.zip" "$it".*; done

相关内容