¿Por qué esto no funciona?¿Cómo obtener todos los archivos en un directorio?
find . -maxdepth 1 -type f -print0 | xargs -0 .
Todo lo que consigo es xargs: .: Permission denied
.
¿Por qué esto no funciona?¿Cómo obtener todos los archivos en un directorio?
find . -maxdepth 1 -type f -print0 | xargs -0 .
Todo lo que consigo es xargs: .: Permission denied
.
Cuando ejecuta . file
, invoca un shell incorporado .
. Su variante xargs
intenta ejecutar el directorio actual.
Incluso si eso invocó el builtin, ese comando se ejecuta en una subcategoría, por lo que todo el "origen" sería inútil.
englobamiento al uso concha y un lazo para que:
for file in * ; do
if [ -f "$file" ] ; then
. "$file"
fi
done
@ solución de Mat es el más limpio, pero en caso de que esté interesado en algunos bash-fu para el gusto de hacerlo, la siguiente solución , basándose en la orden original de find
, obras, también:
eval $(find . -maxdepth 1 -type f -exec echo . \'{}\'';' \;)
find
se utiliza con -exec
para construir un céntimo comando de control para cada archivo encontrado, p. . './foo';
. Tenga en cuenta las comillas simples escapadas para garantizar que los nombres de archivo con caracteres especiales. se manejan adecuadamentefind
devolverá una nueva lista de comandos de abastecimiento separados por línea; mediante el uso de la sustitución de comandos ($()
) sin comillas dobles, el shell pliega estas líneas en una sola línea utilizando un espacio cada una como separador.eval
ejecuta la lista completa de comandos de origen en el contexto del shell actual (verificado en OS X 10.8.1).NOTA: Un problema potencial con esta solución es que la cadena de comandos puede ser grande, posiblemente demasiado grande, con muchos archivos y/o nombres de archivo largos.
¡Gracias por la explicación! –
Solución limpia; es bueno saber que no se puede usar builtins con 'xargs' (y' find''s '-exec' primary, para el caso). Aquí está el equivalente al delineador: 'para f in *; hacer [[-f "$ f"]] &&. "$ f"; hecho' – mklement0