Tengo un directorio en el que temp_log.$$
se crean muchos archivos (alrededor de 200) con el nombre con varios otros archivos importantes que necesito verificar.
¿Cómo puedo enumerar fácilmente todos los archivos y excluirlos de la temp_log.$$
visualización?
Rendimiento esperado
$ ls -lrt <exclude-filename-part>
-- Lists files not matching the above given string
He pasado por la ls
página de manual pero no pude encontrar nada en esta referencia. Avíseme si me he perdido alguna información vital aquí.
Gracias
ls --hide='temp_log.$$'
debería funcionar. También podría / debería extender esto con comodines, dependiendo de qué parte del término completotemp_log.$$
sea.Respuestas:
Con GNU
ls
(la versión en Linux y Cygwin no integrados, a veces también se encuentra en otros lugares), puede excluir algunos archivos al enumerar un directorio.(tenga en cuenta la forma larga de
-I
es--ignore='temp_log.*'
)Con zsh, puede dejar que el shell realice el filtrado. Pase
-d
als
para evitar enumerar el contenido de los directorios coincidentes.Con ksh, bash o zsh, puede usar la sintaxis de filtrado de ksh. En zsh, corre
setopt ksh_glob
primero. En bash, correshopt -s extglob
primero.fuente
-Itemp_log.*
sin espacio después del-I
-I
. Sin embargo,*
debe citarse de una forma u otra.-I temp_log.*
pero no funciona-I 'temp_log.*'
,-I "temp_log.*"
,-I temp_log.\*
, etc, son bien.Puedes usar
grep
con la opción-v
.fuente
Puedes usar
find
para esto:Esto solo imprimirá los nombres, puede agregarlos
-ls
para crear unals -l
salida de estilo con marca de tiempo y permisos, o usar-exec ls {} +
para pasar a ls con las opciones que desee para columnas, clasificación, etc.Escribí esto asumiendo que esto solo eran archivos en un directorio. Si el directorio contiene otros directorios, puede evitar enumerarlos recursivamente
Y si usa ls, querrá pasar la opción -d para evitar que aparezca en los directorios:
-exec ls -d {} +
fuente
-maxdepth 1
imitar no recursivols
.find
sin-maxdepth
deben mirar aquí .Creo que quieres usar una función del shell, no de
ls
. Yo uso bash, así que busqué lo que quieresman bash
. Busque "^ EXPANSION", (presionando primero '/'). Extracto:Recientemente comencé a excluir archivos basados en su primera letra, con un comando como:
Esto coincidiría con cualquier cosa que no comience con la letra
t
. Si agrega más caracteres entre los corchetes, también excluye los archivos que comienzan con esas letras.Buscando un enlace, ¡y tengo uno bueno! Ver coincidencia de patrones . A partir de ahí, esto funcionaría para su caso:
Esto requiere que la
extglob
opción de shell esté habilitada usando elshopt
builtin (shopt -s extglob
), como lo indica Gilles .fuente
Solo haz
fuente
grep
busca un patrón dentro de un archivo, en lugar de en el nombre del archivo.Dado que los archivos que NO desea imprimir tienen "temp_log". en el nombre del archivo, luego filtre con grep:
NOTA: La otra publicación con una respuesta similar probablemente fue rechazada porque el usuario no incluyó comillas "" alrededor de la cadena que grep debería estar buscando. Sin las comillas, no funciona como se anuncia.
fuente
temp_log
. Esta no es una buena forma (general) de excluirls
resultados.-F
@ smokes2345; un punto coincidirá con cualquier carácter en una expresión regular básica. Ver: unix.stackexchange.com/q/119905/117549