Existe alguma maneira de `ls -d` quando nenhum argumento for passado para pular a exibição de `.`?

Existe alguma maneira de `ls -d` quando nenhum argumento for passado para pular a exibição de `.`?

Eu tenho os resultados de um findcomando passando xargspara um arquivo ls -d. Quando nenhum arquivo corresponde, recebo:

.

como minha única saída, porque por padrão ls -dexibe:

.

..., quando nenhum argumento (nome do arquivo) é especificado. Existe alguma maneira de ls -domitir .quando não são passados ​​argumentos e simplesmente não exibe saída?

Atualizar: Você simplesmente não consegue convencer ls -da não exibir .:

.

ls -d -A\                # Skip implied
   --hide=.\             # No, really, skip implied
   --ignore=.            # I mean it, damn it!

.

:)

Responder1

Usar xargsjunto 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 findem 1989 por David Korn para SVr4.

Responder2

Você marcou, 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, lsnão será iniciado se findnão corresponder a nada.

findainda pode corresponder .explicitamente. Para evitar isso, adicione ! -name .à expressão find. Ou use -mindepth 1(no GNU find) para evitar finda correspondência de qualquer um dos caminhos fornecidos na linha de comando.

(Quanto a como lsignorar ., não tenho ideia.)

informação relacionada