shell 脚本中的 xargs

shell 脚本中的 xargs

我想按奇数和偶数对 jpeg 图像进行分组。所以我做了以下事情:

$ mkdir odd
$ mkdir even
$ find . -regextype posix-egrep -regex ".*[13579].jpg$" -print0 | xargs -i -0 mv {} odd/
$ find . -regextype posix-egrep -regex ".*[02468].jpg$" -print0 | xargs -i -0 mv {} even/

它工作正常。我在 shell 脚本中写了同样的事情。

#!/bin/bash
mkdir odd
mkdir even
find . -regextype posix-egrep -regex ".*[13579].jpg$" -print0 | xargs -i -0 mv {} odd/
find . -regextype posix-egrep -regex ".*[02468].jpg$" -print0 | xargs -i -0 mv {} even/

但它返回以下错误:

xargs: Warning: a NUL character occurred in the input.  It cannot be passed through in the argument list.  Did you mean to use the --null option?

为什么这个脚本不起作用?如何修复?

答案1

造成这种情况的一个可能原因是您可能有两个不同版本的xargs选项语法不同,并且由于 $PATH 的差异,脚本使用的版本与您的交互式会话不同。您可以通过编写另一个脚本来查看它找到的版本,从而轻松检查这一点:

#!/bin/bash
echo "xargs is: $(which xargs)"
echo "PATH is: $PATH"

...查看脚本打印的内容,然后以交互方式运行相同的命令(或仅运行which xargs),看看是否得到不同的结果。如果结果不同,则可能是您的 shell 初始化脚本(~/.bashrc、~/.bash_profile 等)中的某些内容导致了此问题。

相关内容