El lspuede dar un resultado como
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo
Pero en realidad espero descubrirlo CentOS-Base.repo, CentOS-Debuginfo.repoy CentOS-Vault.repono CentOS-Media.repo. Entonces ejecuto este comando
ls [^\(Media\)]
Pero recibo información de error. ¿Cómo debo hacer?

Respuestas:
En el caso más simple, puede usar lo siguiente (en caso de que la primera subpalabra sea estática
CentOS):[BDV]- clase de caracteres para garantizar que la segunda subpalabra comience con uno de los caracteres especificadoso lo mismo con la negación :
Si desea ignorar todos los nombres de archivo que contienen el
Mcarácter, con la implementación de GNU dels(como se encuentra típicamente en CentOS), use la opción-I(--ignore):Para ignorar entradas con
Mediapalabra:Esos patrones deben pasarse literalmente
ls, por lo que deben citarse (de lo contrario, el shell los trataría como globos para expandirse).fuente
ls *[^M]*?ls CentOS-[^M]*trabajo, pero ells *[^M]*no ..MOcurrencia de caracteres OMediapalabra?M.Algunos proyectiles tienen operadores de negación:
zsh -o extendedglob:ksh,zsh -o kshglob,bash -O extglob:bash:ksh:fuente
Una opción es usar
findcon las-not -namebanderas. Es decirfind . -not -name CentOS-Media.repo. Si no desea recurrir a la estructura del directorio, agregue la-maxdepth 1bandera.Alternativamente, uno puede escribir lo siguiente (que es mucho más complejo, pero olvidé la
-notmarca y publiqué esta respuesta originalmente, por lo que no eliminaré esta parte):find . -print0 | grep --invert-match -z "CentOS-Media.repo$" | tr '\0' '\n'findDebe forzar la separación de los nombres de archivo con un byte nulo, para que las nuevas líneas en los nombres de archivo no descompongan nada. Con suerte,grepadmite este tipo de separador con bandera-z. Es posible que desee volver a la separación típica (es decir, byte nulo -> nueva línea) contr '\0' '\n'fuente
printf '%s\0' *que no se repiten y no incluyen archivos de puntos por defecto (pero algunos shells tienen una opción para eso). También no es necesario-Epara que la expresión regular, pero para ser exigente que debe barra invertida o bien el.o ponerlo en[], y lo hace depender de GNU encontrar y grep.La forma más fácil es usar find. Hacer:
Aquí "f" significa buscar solo archivos regulares (sin embargo, excluye enlaces simbólicos a archivos regulares; con GNU
find, use-xtype fen su lugar para incluirlos). Si desea buscar directorios, pase "d" en su lugar.(
-maxdepthmientras que inicialmente una extensión GNU ahora es bastante común. Sifindno la admite, puede reemplazarla-maxdepth 1con el estándar! -name . -prune).consulte la página de búsqueda de man para obtener más funciones increíbles.
fuente