脚本为它找到的每个.txt文件创建单独的zip文件,然后移动它们

时间:2012-09-07 15:31:28

标签: shell unix

我需要一个基本上这样做的shell脚本:

  • 在文件夹中搜索所有txt文件,并为找到的每个文件创建一个单独的zip文件,其中包含与找到的txt文件相同的文件+ .zip。
  • 之后将创建的zip文件移动到txt文件。

基本上它是一个脚本,用于替换txt文件列表的zip等价物,但保持相同的名称。

我已经使用find找到了我要压缩的文件:

find . -name '.txt.' -print

结果是:

./InstructionManager.txt.0
./InstructionManager.txt.1

这些是我想要单独压缩的文件(当然它们会更多),但不知道如何将它们作为参数单独用于make commans:

zip ./InstructionManager.txt.0.zip ./InstructionManager.txt.0
mv ./InstructionManager.txt.0.zip ./InstructionManager.txt.0
zip ./InstructionManager.txt.1.zip ./InstructionManager.txt.1
mv ./InstructionManager.txt.1.zip ./InstructionManager.txt.1

任何想法?不,我不想要所有文件的拉链:S 感谢

3 个答案:

答案 0 :(得分:24)

find . -name '*.txt.*' -print -exec zip '{}'.zip '{}' \; -exec mv '{}'.zip '{}' \;
  • 查找.txt个文件
  • 第一个-exec拉链文件
  • 第二个-exec将压缩文件重命名为原始名称

请注意,此过程会覆盖原始文件。要确保新文件是实际的zip文件,您可以执行以下操作:

file InstructionManager.txt.*

应返回:

InstructionManager.txt.0: Zip archive data, at least v1.0 to extract
InstructionManager.txt.1: Zip archive data, at least v1.0 to extract

答案 1 :(得分:9)

使用find和zip:

find . -name '*.txt.*' -exec zip '{}.zip' '{}' \;

答案 2 :(得分:1)

使用findxargs,接受空格的文件名:

find . -name '*.txt.*' -print0 | xargs -0 -r -n1 -I % sh -c '{ zip %.zip %; mv %.zip %;}'

文件已压缩,然后重命名为原始名称