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.
ls --hide='t_*' uploads
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 coinciden t*
; en bash, esta característica debe shopt -s extglob
activarse y en zsh debe activarse con setopt ksh_glob
. Zsh también tiene la sintaxis equivalente con la ^t_*
que debe activarse setopt 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 coinciden t_*
" y no "todos los archivos que no coinciden con los archivos normales t_*
".
setopt extended_glob # put this in your ~/.zshrc
ls uploads/^t_*(.)
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 -maxdepth
opción no es portátil; puede usar -prune
en su lugar, para evitar que se repita find
de forma portátil.
find uploads/* -type d -prune -o \! -type f -name 't_*' -print
Reemplace -print
por -exec ls -lG -- {} +
para ejecutar ls
con 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 -A
a ls
, o añadir el D
calificativo pegote en zsh ( ls uploads/^t_*(.D)
). Con find
, puede usar un enfoque diferente para hacer que se repita solo un nivel ( find
no trata los archivos de puntos especialmente). Esto solo funciona completamente si se ejecuta find
en el directorio actual.
cd uploads && find . -name . -o -type d -prune -o \! -type f -name 't_*' -print