¿Tienes GNU?
La versión gnu de ls
has --group-directories-first
. Y cp
tiene -t
.
No GNU?
En los sistemas que no tienen GNU ls
, su mejor opción es dos llamadas sucesivas find
con -maxdepth n
/ -mindepth n
y -type t
con las opciones apropiadas.
find . -maxdepth 1 -mindepth 1 -type d
find . -maxdepth 1 -mindepth 1 \! -type d
Para copiar archivos, con el objetivo primero, tendría que escribir un script que guarde el primer argumento, luego use shift
y agregue el argumento hasta el final.
#!/bin/sh
target="$1"
shift
cp -r -- "$@" "$target"
¡Cuidado!
Si planeaba usarlos juntos, es decir, recopilar la lista de ( find
o ls
posiblemente mediante el uso xargs
) y pasarla a cp
(o un cp
contenedor), debe tener en cuenta los peligros que conlleva analizar las listas de archivos (básicamente, los nombres de archivo pueden contienen caracteres como líneas nuevas que pueden estropear su guión). Específicamente, mira en find
's -exec
y -print0
opciones y xargs
' s -0
opción.
Una herramienta alternativa para copiar eficientemente árboles de directorios.
Es posible que desee considerar el uso en su rsync
lugar; Tiene muchas funciones que pueden facilitar su trabajo.
ls
Tiene un--group-directories-first
interruptor.