我需要一个基本上这样做的shell脚本:
基本上它是一个脚本,用于替换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 感谢
答案 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)
使用find
和xargs
,接受空格的文件名:
find . -name '*.txt.*' -print0 | xargs -0 -r -n1 -I % sh -c '{ zip %.zip %; mv %.zip %;}'
文件已压缩,然后重命名为原始名称