
Eu tenho os resultados de um find
comando passando xargs
para um arquivo ls -d
. Quando nenhum arquivo corresponde, recebo:
.
como minha única saída, porque por padrão ls -d
exibe:
.
..., quando nenhum argumento (nome do arquivo) é especificado. Existe alguma maneira de ls -d
omitir .
quando não são passados argumentos e simplesmente não exibe saída?
Atualizar: Você simplesmente não consegue convencer ls -d
a não exibir .
:
.
ls -d -A\ # Skip implied
--hide=.\ # No, really, skip implied
--ignore=. # I mean it, damn it!
.
:)
Responder1
Usar xargs
junto com find
é tão anos 1980...
Ligue, por exemplo:
find . -type d -exec ls -d {} +
e o comando ls nunca será chamado sem argumentos.
O recurso execplus foi adicionado find
em 1989 por David Korn para SVr4.
Responder2
Você marcoulinux, então você provavelmente executa o GNU xargs, que tem esta opção:
-r, --no-run-if-empty
If the standard input does not contain any nonblanks, do not run the command.
Com find ... | xargs -r ls -d
, ls
não será iniciado se find
não corresponder a nada.
find
ainda pode corresponder .
explicitamente. Para evitar isso, adicione ! -name .
à expressão find. Ou use -mindepth 1
(no GNU find) para evitar find
a correspondência de qualquer um dos caminhos fornecidos na linha de comando.
(Quanto a como ls
ignorar .
, não tenho ideia.)