有如下需求:/www/www.codesou.cn/uploads 目录中包含多个子目录及大量txt文件。要求将该目录包含子目录下的所有txt文件批量压缩成对应的zip文件。如:

/www/www.codesou.cn/uploads/230205/1.txt => /www/www.codesou.cn/uploads/230205/1.txt.zip
...
/www/www.codesou.cn/uploads/230206/2.txt => /www/www.codesou.cn/uploads/230206/2.txt.zip

linux命令如下:

find . -type f -name "*.txt" -execdir zip '{}.zip' '{}' ;

解释:

  • 第一个参数.是你想要开始的目录,这里我们是在当前目录下运行的命令,否则要改成要执行的目录路径。
  • 然后我们限制该命令只查找文件 ( -type f),也就是不压缩目录。
  • -name "*.txt"限制只查询以.txt结尾的文件。
  • -execdir选项允许我们对找到的每个文件运行一个命令,且从该文件的目录中执行这个命令。
  • 此命令可以理解为zip file.txt.zip file.txt,所有出现的{}都被替换为实际文件名。
  • 此命令需要以;结尾

如果不想限制文件类型,那么可以执行下面的命令:

find . -type f -execdir zip '{}.zip' '{}' ;

如果不想包含子目录,只想检索当前目录的文件,那么可以使用下面的命令:

find . -type f -maxdepth 1 -execdir zip '{}.zip' '{}' ;