我有一个包含大量文件的目录。我想将特定掩码的每个文件压缩到单独的存档中。如何自动执行此操作?
例如,以下是示例目录内容: - 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