xargs no shell script

2

Eu quero agrupar imagens jpeg por número ímpar e número par. Então eu gostei de seguir:

$ 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/

Funciona bem. E eu escrevo mesma coisa em um script de 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/

Mas ele retorna o seguinte erro:

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?

Por que esse script não funciona? E como consertar isso?

    
por ironsand 10.08.2013 / 08:35

1 resposta

0

Uma possível fonte disso é que você pode ter duas versões diferentes de xargs com a sintaxe de opção diferente e, devido às diferenças em $ PATH, o script está usando uma sintaxe diferente da sessão interativa. Você pode verificar isso com bastante facilidade escrevendo outro script para ver qual versão ele encontra:

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

... veja o que o script imprime e, em seguida, execute os mesmos comandos (ou apenas which xargs ) interativamente e veja se você obtém um resultado diferente. Se eles saírem diferentes, provavelmente há algo em seus scripts de inicialização do shell (~ / .bashrc, ~ / .bash_profile, etc) que estão causando isso.

    
por 10.08.2013 / 16:42