将文件夹中所有未压缩的文件压缩到一行中

将文件夹中所有未压缩的文件压缩到一行中

我有很多文本文件需要压缩。每个文件都必须单独压缩。但其中一些文件已经压缩了。

如何在一行中压缩所有以 结尾的文件,方法是.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 {}

相关内容