2

Я хочу сгруппировать изображения в формате 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/

Работает нормально. И я пишу то же самое в сценарии оболочки.

#!/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 ответ1

0

Одним из возможных источников этого является то, что у вас может быть две разные версии xargs с разным синтаксисом опций, и из-за различий в $ PATH скрипт использует другую версию, чем ваш интерактивный сеанс. Вы можете легко проверить это, написав другой скрипт, чтобы увидеть, какую версию он находит:

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

... посмотрите, что печатает сценарий, затем запустите те же команды (или просто which xargs) в интерактивном режиме и посмотрите, получите ли вы другой результат. Если они отличаются друг от друга, возможно, что-то в скриптах инициализации вашей оболочки (~/.bashrc, ~/.bash_profile и т.д.) Вызывает это.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .