我有很多文本文件需要压缩。每个文件都必须单独压缩。但其中一些文件已经压缩了。
如何在一行中压缩所有以 结尾的文件,方法是.txt
将其附加.zip
到其名称中?
我知道在 Bash 中可以,但我不知道如何做。
find /path/to/files -name "*.txt"
将列出这些文件zip fname.txt.zip fname.txt
将压缩文件rm fname.txt
将删除原始文件
我如何将它们放在一行中?我不太理解xargs
我经常在这些情况下看到的
答案1
虽然可以使用管道命令来完成,但 find 可以单独完成:
find /path/to/files -name '*.txt' -exec zip '{}.zip' '{}' ';' -exec rm '{}' ';'
您可能已经猜到了,-exec 运行以分号终止的命令(使用引号或反斜杠在 shell 中隐藏),{} 表示当前找到并处理的文件的名称(它也在 shell 中隐藏)。
答案2
深吸一口气,然后发出两个命令
find . | grep -i '\.txt$' | xargs -I {} zip {}.zip {}
find . | grep -i '\.txt$' | xargs -I {} rm {}