尝试在 Linux 上使用“find”和“zip -m”压缩并自动删除文件

Gre*_*vid 4 linux zip file

/test 文件夹中有超过 300000 个文件,它们的名称很长(超过 30 个字符),并且标头相同,如“TEST_*” 我想将所有文件压缩到 .zip 包中,并将它们从 /test 文件中删除。所以我使用了如下命令:

find ./test -name "TEST_\*" -mtime +1 | zip -m /home/TESTbac.zip -@;
Run Code Online (Sandbox Code Playgroud)

但运行 shell 脚本后 /test 文件夹中的文件仍然存在

我想问的是为什么运行脚本后文件仍然存在?我该如何解决这个问题?

Tim*_*out 5

您不需要将结果通过管道传递给zip命令。find有一个-exec参数,将为每个匹配路径执行给定的命令。我怀疑管道过程中的某些因素导致其-m无法按预期工作。

而是尝试这个:

find ./test -name "TEST_*" -exec zip -m /home/TESTbac.zip '{}' ';'
Run Code Online (Sandbox Code Playgroud)

注意:带引号的分号表示命令结束-exec。它被引用,以便命令行可以区分命令的结尾-exec和整个命令本身的结尾。同时,{} 会自动替换为find匹配的路径结果。