Tengo un directorio llamado uploads. Contiene un montón de archivos, además de algunos subdirectorios que a su vez contienen archivos.
¿Hay alguna manera de que pueda (en un solo paso) hacer lo siguiente:
Enumere SOLAMENTE los archivos en el directorio de cargas raíz: no quiero ver los nombres de las subcarpetas ni sus contenidos;
y
NO enumere ningún archivo que comience con
t_
Sé acerca de la -dbandera, pero no me da lo que quiero.

-exec ls -lG -- {} +en su respuesta para obtener la salida usando opciones adicionales para ls. También puede agregar solo un-lsa este hallazgo para obtener una aproximación rápida y sucia de la vista detallada de ls.GNU ls (es decir, el comando ls en sistemas Linux no integrados y Cygwin, también disponible en algunos otros dispositivos) tiene una opción para ocultar algunos archivos, en función de sus nombres. Sin embargo, no hay forma de ignorar los directorios.
Otro enfoque es hacer que su shell haga la correspondencia. Bash, ksh y zsh tienen un patrón de negación
!(t_*)para que coincida con todos los archivos, excepto los que coincident*; en bash, esta característica debeshopt -s extglobactivarse y en zsh debe activarse consetopt ksh_glob. Zsh también tiene la sintaxis equivalente con la^t_*que debe activarsesetopt extended_glob. Esto todavía no ignora los directorios. Zsh tiene una característica adicional que permite hacer coincidir archivos no solo por nombre sino también por metadatos y más: calificadores globales . Agregue(.)al final de una coincidencia para restringir a los archivos normales. La negación^es parte de la sintaxis de coincidencia de nombres, por lo que^t_*(.)significa "todos los archivos normales no coincident_*" y no "todos los archivos que no coinciden con los archivos normalest_*".Si te encuentras sin herramientas avanzadas, puedes hacerlo en cualquier Unix con
find. No es el tipo de cosa que normalmente escribiría en la línea de comando, pero es potente y preciso. Caleb ya ha mostrado cómo hacer esto con GNU find . La-maxdepthopción no es portátil; puede usar-pruneen su lugar, para evitar que se repitafindde forma portátil.Reemplace
-printpor-exec ls -lG -- {} +para ejecutarlscon sus opciones favoritas en los archivos.Todos los comandos anteriores ocultan archivos de puntos (es decir, archivos cuyo nombre comienza con a
.). Si desea mostrar ellos, pasar-Aals, o añadir elDcalificativo pegote en zsh (ls uploads/^t_*(.D)). Confind, puede usar un enfoque diferente para hacer que se repita solo un nivel (findno trata los archivos de puntos especialmente). Esto solo funciona completamente si se ejecutafinden el directorio actual.fuente
-maxdepthdebería funcionar, pero el problema de "portabilidad" al que se refiere Gilles es que el BSDfind(también se encuentra en OSX, creo) es un animal un poco diferente, por lo que es posible que necesite su respuesta también. @Gilles: ¡+1 para el truco zsh!prunevienen a la mente algunos comentarios no tan jugosos acerca de s, pero lo dejaré pasar simplemente diciendo que cuando estoy hurgando en mis propios sistemas la cantidad de veces que el pensamiento "funcionaría este comando si estuviera encendido AIX, Solaris o MINIX3 "es aproximadamente ... en espera ... Me está costando mucho leer el medidor ... la pantalla está congelada0.00.lstiene Gnu una--use-telepathyopción? Esa es la forma más rápida de mostrar solo los archivos que desea. Sin embargo, puede que no sea portátil.fuente
$9en esta declaración?lssalida .print$ NF` sería mejor, IMO. $ NF significa número de campos, que serían 9 y es un uso común en AWK como una buena oportunidad para enseñar a otros sobre $ NF.fuente
find?Déjame darle una oportunidad usando
lsy tuberías:digamos que la última columna es la novena.
fuente
Si el problema de portabilidad -maxdepth de find es un problema, puede usar:
No soy un experto, pero creo que esto debería funcionar. Supongo que parece un poco críptico, pero si hablas mal, en realidad no lo es. $ NF podría usarse en lugar de $ 9. También puedes hacer:
que hace lo mismo (pero quizás menos eficientemente que el anterior ???).
En realidad, después de pensar en las otras publicaciones, parece que
Es una forma aún más corta y clara.
Alguien por favor corrígeme si me equivoco. :-)
fuente
lsgeneralmente no es una buena idea . Sus trucos awk fallarán con nombres de archivos con espacios en blanco en ellos, por ejemplo.Encontré estas formas cortas:
o
fuente
Prueba este alias y úsalo:
fuente
ls -hLlFmuestra los subdirectorios y muestra los archivos que comienzan cont_. Entonces, ¿cómo responde esto a la pregunta?Pan comido:
ls -l --hide 't_*' <absolute path to desired directory> | grep -v ^dfuente