首页 > 解决方案 > 带和不带 xargs 的 find -name 给出不同的结果

问题描述

我需要对很多目录中的很多文件执行一些操作,比如检查它们是否受密码保护。

我创建了一个 bash 脚本(fileproc.sh),我想检查它是否有效,所以我做了一件愚蠢的事情来看看它是否有效:

#!/bin/sh
echo 'File: ' + $1

然后,如果我运行一个简单的

find . -name "*.zip" -type f

正如预期的那样,我有一长串 .zip 文件。

如果我跑

find . -name "*.zip" -type f -print0 | xargs ./fileproc.sh

我只有三个文件。

我究竟做错了什么?

谢谢

标签: linuxbashshellxargs

解决方案


xargs用于运行带有多个参数的命令,请参阅man xarg. 它会将打印的行附加find到命令行,直到达到与系统相关的限制。

$1只是第一个命令行参数,你看不到第二个和后面的参数。

在您的脚本中尝试

echo 'File(s): ' "$@"

推荐阅读