Saída diferente de 'find | xargs ls 'para o mesmo comando em diferentes versões do Ubuntu

3

Eu tenho duas instalações do Ubuntu:

A: 14.04.3 LTS (GNU/Linux 3.13.0-77-generic x86_64)

B: 14.04.2 LTS (GNU/Linux 3.13.0-61-generic x86_64)

Estou executando o seguinte comando:

find . -name "nosuch.file" -print0 | xargs -0 ls

(o comando real é mais complexo, mas consegui reduzi-lo a isso). Não há arquivo nosuch.file no diretório ou nos subdiretórios atuais.

No servidor A, o comando produz saída vazia como eu esperava.

No servidor B, o comando produz a listagem do diretório atual (onde eu executo o comando).

Em ambos os servidores executando apenas find . -name "nosuch.file" -print0 produz saída vazia.

Nos dois servidores, a mesma versão de find , xargs e ls está instalada:

$ find --version
find (GNU findutils) 4.4.2
Copyright (C) 2007 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Eric B. Decker, James Youngman, and Kevin Dalley.
Built using GNU gnulib version e5573b1bad88bfabcda181b9e0125fb0c52b7d3b
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION FTS() CBO(level=0)

$ xargs --version
xargs (GNU findutils) 4.4.2
Copyright (C) 2007 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Eric B. Decker, James Youngman, and Kevin Dalley.
Built using GNU gnulib version e5573b1bad88bfabcda181b9e0125fb0c52b7d3b

$ ls --version
ls (GNU coreutils) 8.21
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Richard M. Stallman and David MacKenzie.

Por que o comando se comportaria de maneira diferente? O que posso fazer para atingir um comportamento consistente como no servidor A (saída vazia para arquivos não encontrados)?

    
por Adam Michalik 14.03.2016 / 17:41

1 resposta

2

"O que eu posso fazer para alcançar um comportamento consistente como no servidor A (saída vazia para arquivos não encontrados)?"

Para obter esse comportamento com xargs , você pode usar a opção -r / --no-run-if-empty para que o comando especificado não seja executado se nenhum nome de arquivo for passado para ele. Na página do manual :

If the standard input does not contain any nonblanks, do not run the command. Normally, the command is run once even if there is no input.

Note que esta opção é uma característica do GNU xargs e não é padrão, isto é, especificada pelo POSIX.

    
por 14.03.2016 / 22:56

Tags