
Tengo los resultados de un find
comando pasando xargs
a un archivo ls -d
. Cuando ningún archivo coincide, obtengo:
.
como mi único resultado, porque de forma predeterminada ls -d
muestra:
.
..., cuando no se especifica ningún argumento (nombre de archivo). ¿Hay alguna forma de ls -d
omitir .
cuando no se pasan argumentos y simplemente no se muestra ningún resultado?
Actualizar: Simplemente no puedes convencerlo ls -d
de que no muestre .
:
.
ls -d -A\ # Skip implied
--hide=.\ # No, really, skip implied
--ignore=. # I mean it, damn it!
.
:)
Respuesta1
Usarlo xargs
junto con find
es tan de los años 80...
Llamar por ejemplo:
find . -type d -exec ls -d {} +
y el comando ls nunca será llamado sin argumentos.
La función execplus fue agregada find
en 1989 por David Korn para SVr4.
Respuesta2
tu etiquetasteLinux, por lo que probablemente ejecutes GNU xargs, que tiene esta opción:
-r, --no-run-if-empty
If the standard input does not contain any nonblanks, do not run the command.
Con find ... | xargs -r ls -d
, ls
no se iniciará en absoluto si find
no coincide con nada.
find
aún podría coincidir .
explícitamente. Para evitar eso, agregue ! -name .
a la expresión de búsqueda. O utilice -mindepth 1
(en GNU find) para evitar find
que coincida con cualquiera de las rutas proporcionadas en la línea de comando.
(En cuanto a cómo hacer que ls
se ignore .
, no tengo idea).