Listar files que no coinciden con la cadena dada en el nombre del file

Tengo un directory en el que muchos files (alnetworkingedor de 200) con el nombre temp_log.$$ se crean con varios otros files importantes que debo verificar.

¿Cómo puedo enumerar fácilmente todos los files y excluir que se temp_log.$$ files temp_log.$$ ?

Rendimiento esperado

 $ ls -lrt <exclude-filename-part> -- Lists files not matching the above given string 

He ls página de ls man pero no he podido encontrar nada en esta reference. Por favor, avíseme si he omitido alguna información vital aquí.

Gracias

Con GNU ls (la versión en Linux y Cygwin no integrados, que a veces también se encuentran en otros lugares), puede excluir algunos files cuando se list un directory.

 ls -I 'temp_log.*' -lrt 

(tenga en count la forma larga de -I es --ignore='temp_log.*' )

Con zsh, puedes dejar que el caparazón filtre. Pase -d a ls para evitar include el contenido de los directorys coincidentes.

 setopt extended_glob # put this in your .zshrc ls -dltr ^temp_log.* 

Con ksh, bash o zsh, puede usar la syntax de filtrado ksh. En zsh, ejecute setopt ksh_glob primero. En bash, ejecuta shopt -s extglob primero.

 ls -dltr !(temp_log.*) 

Puedes usar grep con la opción -v .

 ls -lrt | grep -v <exclude-filename-part> 

Puede usar find para esto:

 find . \! -name 'temp_log*' 

Esto solo imprimirá los nombres, puede agregar -ls para hacer una salida de estilo ls -l con timestamp y permissions, o usar -exec ls {} + para pasar realmente a ls con las opciones que desee para columnas, sorting, etc.

Escribí esto asumiendo que esto solo eran files en un directory. Si el directory contiene otros directorys, es posible que desee evitar enumerarlos recursivamente

 find . \! -name 'temp_log*' -maxdepth 1 

Y si usa ls, querrá pasar la opción -d para evitar que -exec ls -d {} + dentro de los directorys: -exec ls -d {} +

Creo que quieres usar una característica del shell, no de ls . Uso bash, así que busqué lo que quieres en man bash . Busca "^ EXPANSION", (presionando '/'). Extracto:-

EXPANSIÓN

  Expansion is performed on the command line after it has been split into words. There are seven kinds of expansion performed: brace expansion, tilde expansion, parameter and variable expansion, command substitution, arithmetic expansion, word splitting, and pathname expansion. 

… <snip> …
Pathname Expansion

  After word splitting, unless the -f option has been set, bash scans each word for the characters *, ?, and [. If one of these characters appears, then the word is regarded as a pattern, and replaced with an alphabetically sorted list of file names matching the pattern. 

Recientemente comencé a excluir files según su primera letra, con un command como:

 > ls ./[^t]* 

Esto coincidiría con cualquier cosa que no comience con la letra t . Si agrega más caracteres entre corchetes, entonces excluirá los files que comiencen con esas letras también.

Buscando un enlace, y tengo uno bueno! Ver coincidencia de patrones . A partir de ahí, esto funcionaría para su caso:

 > ls -lrt ./!(temp_log.*) 

simples 🙂

Solo haz

 ls -ltr `grep -il patterntosearch *`