不工作:找-print0 | xargs -0 bash -c“....”

时间:2016-03-26 23:16:08

标签: bash find xargs

O / S = RHEL 7.2

正如您所料,下面的前两行打印“dbg”后跟/ home / mydir下的所有文件。但如果我使用-print0和xargs -0,如后两行所示,则第一个文件在目录中被跳过。我尝试将回声更改为     echo dbg“$ 0”$ @“ 只要子目录中有文件,这就可以工作。在空子目录中,$ 0返回“bash”。

# This works
dir=/home/mydir
find "$dir" -maxdepth 1 -type f -print | xargs  bash -c '/bin/echo dbg "$@"'  

# This skips the first file
dir=/home/mydir
find "$dir" -maxdepth 1 -type f -print0 | xargs -0 bash -c '/bin/echo dbg "$@"'

1 个答案:

答案 0 :(得分:3)

当您使用bash -c 'command' arg0 arg1 arg2 …时,表示为arg0的参数将被视为$0,即脚本的名称(因此不是"$@"的一部分)。< / p>

您可以演示:

$ bash -c 'echo dbg "$@"' a b c
dbg b c
$ bash -c 'echo dbg "$@"' name a b c
dbg a b c
$ bash -c 'echo dbg [$0] "$@"' name a b c
dbg [name] a b c
$

使用:

find "$dir" -maxdepth 1 -type f -print0 | xargs -0 bash -c '/bin/echo dbg "$@"' name