有如下需求:/www/www.02405.com/uploads 目录中包含多个子目录及大量txt文件。要求将该目录包含子目录下的所有txt文件批量压缩成对应的zip文件。如:
/www/www.02405.com/uploads/230205/1.txt => /www/www.02405.com/uploads/230205/1.txt.zip
...
/www/www.02405.com/uploads/230206/2.txt => /www/www.02405.com/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' '{}' \;