Tengo dos preguntas. Primero, ¿qué comando enumera los archivos y directorios, pero primero los directorios?
Segunda pregunta: quiero copiar una lista de archivos en un solo directorio, pero convertir el directorio de destino en el primer nombre de archivo en el comando.
command-line
shell-script
ls
Elham abbasi
fuente
fuente

lsTiene un--group-directories-firstinterruptor.-tes posiblemente una opción solo de GNUcpque toma un directorio objetivo explícito y, por lo tanto, puede ir a cualquier parte de la línea de comando, incluido el comienzo.Respuestas:
¿Tienes GNU?
La versión gnu de
lshas--group-directories-first. Ycptiene-t.No GNU?
En los sistemas que no tienen GNU
ls, su mejor opción es dos llamadas sucesivasfindcon-maxdepth n/-mindepth ny-type tcon las opciones apropiadas.Para copiar archivos, con el objetivo primero, tendría que escribir un script que guarde el primer argumento, luego use
shifty agregue el argumento hasta el final.¡Cuidado!
Si planeaba usarlos juntos, es decir, recopilar la lista de (
findolsposiblemente mediante el usoxargs) y pasarla acp(o uncpcontenedor), 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 enfind's-execy-print0opciones yxargs' s-0opción.Una herramienta alternativa para copiar eficientemente árboles de directorios.
Es posible que desee considerar el uso en su
rsynclugar; Tiene muchas funciones que pueden facilitar su trabajo.fuente
--group-directories-first).ls --versionpara averiguar cuál tienes.Listado de directorios primero para un no GNU
ls:ls -l | sortTenga en cuenta que esto también enumerará todo el montón de otras cosas raras como enlaces simbólicos, tomas de corriente y tuberías (agrupadas adecuadamente, por supuesto), pero teniendo en cuenta que esas cosas son bastante raras, eso no debería ser un problema. De lo contrario, el filtro sería
ls -l | grep '^(-|d)' | sortfuente
sort -r.funciona para bash y zsh
simplemente agregue alias en ~ / .bashrc o ~ / .zshrc
Además, si tiene ZSH, puede usar la utilidad "k"
simplemente instálelo con antígeno, colocando lo siguiente en ~ / .zshrc
fuente
Para
zshlas listas de finalización, puede establecer ellist-dirs-firstestilotruepara que los directorios se muestren primero. En su~/.zshrc:(aquí se aplica a todos los widgets de finalización que lo admiten y para todos los comandos; puede restringir eso si lo desea, consulte la
zstyledocumentación para más detalles)Si aún no lo ha hecho, asegúrese de ejecutar
compinstalltambién para obtener listas de finalización en color, con descripciones, etc. y todas las demás ventajas.fuente
Para no GNU, awk puede filtrar todos los demás campos:
ls -lmust contiene 9 camposEl resultado se ve
ls -1pero con los directorios puestos primero:De acuerdo con "El formato largo" de la página de manual de ls, cuando se involucran otros tipos de archivos, el orden de salida debe ser:
Una práctica función bash (ponla en tu .bash_profile o .bashrc):
fuente