我想按奇数和偶数对 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 等)中的某些内容导致了此问题。