5 votos

Búsqueda de *.swo

Creo que esto debería ser fácil, pero me tiene perplejo.

Cuando yo uso la siguiente, se encuentra el archivo.

$ ls -al  .bash_*.sw*   
-rw-r--r--  1 damiensawyer  staff  12288 27 Nov 07:39 .bash_profile.swo

Pero cuando yo uso esta, no la encuentra.

$ ls -al *.sw*      
ls: *.sw*: No such file or directory

Yo esperaba que el segundo comando que devuelva .bash_profile.swo. Lo que me estoy perdiendo?

6voto

joeytwiddle Puntos 161

Esto no es en realidad causada por ls, desde ls nunca se expande patrones.

La decisión acerca de cómo ampliar glob patrones (patrones que contengan * y ?) es hecha por el shell. Su cáscara es más probable bash.

Por defecto, bash no realiza la ruta de la expansión en dotfiles. Sin embargo, puede hacerlo, ya sea explícita de la escritura de la . (como has descubierto ya) o mediante la activación de la dotglob opción. Desde la página del manual de bash:

dotglob Si se establece, bash incluye los nombres de archivo que comienzan con un". " en los resultados de la ruta de expansión.

Para demostrarlo, vamos a simplemente imprimir la expansión de la con echo en lugar de ls:

$ touch .bash_profile.swo

$ echo .*.swo
.bash_profile.swo

$ echo *.swo
*.swo

$ shopt -s dotglob

$ echo *.swo
.bash_profile.swo

Otra discusión se puede encontrar aquí.

4voto

DigitalRoss Puntos 80400

El uso de ls

El problema es que el archivo tiene dos puntos, no uno. Debe tener en cuenta que:

ls -al .*.sw*

Esto coincidirá con cualquier archivo que comienza con un punto (archivos invisibles como .DS_Store) y también termina con .sw*.

.swa así como .swz coinciden.


El uso de find

Puede utilizar el siguiente para encontrar todos los archivos con la misma extensión (swo en el caso de abajo) en un directorio.

find ~ -iname *swo

-iname encuentra un caso insensible partido.


Usted puede buscar para que el/los archivo específico(s) el uso de este:

find .bash_*.sw*

Nota: el Uso de ~ como la ruta de acceso de búsqueda en la totalidad de su directorio de inicio.

3voto

yoliho Puntos 340

El problema es que ls sólo muestra los archivos que comienzan con un . tiene que explícitamente tienen el primer . en el fichero global.

Por lo tanto los siguientes:

ls .*swo

Unix conchas ampliar el globo antes de ls ve los nombres de archivo.

2voto

Wolfgang Puntos 121

Estos patrones (*.sw* y similares) son conocidos como globos.

Como @Marca y de @Zach Puertas han señalado, globs no coinciden con los archivos cuyos nombres comienzan con un punto menos que explícitamente incluyen un . al principio del patrón. Esto es debido a que en sistemas tipo UNIX (como OS X), los archivos que comienzan con un punto se consideran "oculto" de los archivos, y son generalmente no se muestra por defecto.

Glob coincidencia de que realmente está hecho por el shell (bash por defecto), no por comandos individuales como ls. Como el bash manual se explica bajo el nombre de archivo de Expansión:

Después de la palabra la división de... Bash analiza cada palabra de los caracteres"*', '?', y '['. Si uno de estos personajes aparece, entonces la palabra es considerada como un patrón, y se reemplaza con un orden alfabético de la lista de nombres de archivo coincide con el patrón (véase la Coincidencia de Patrón). Si no hay coincidencia de los nombres de archivo se encuentra,...la palabra se deja sin cambios.

Cuando un patrón se utiliza para el nombre de la expansión, el carácter '.' en el inicio de un nombre de archivo o inmediatamente después de una barra debe ser igualado explícitamente, a menos que el shell opción dotglob está configurado.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X