Digamos que tengo dos archivos en /tmp
:
root@ubuntu:~# touch /tmp/hello.{pyc,py}
root@ubuntu:~# ls /tmp/
hello.py hello.pyc
Ahora, ejecutemos el rm -rf
comando con la opción [co]
root@ubuntu:~# rm -rf /tmp/hello.py[co]
root@ubuntu:~# ls /tmp/
hello.py
¿Alguien puede explicar qué está pasando aquí? ¿Cuál es el [co]
parámetro? ¿Cómo podemos hacer que funcione para otras extensiones? Digamos que tengo foo.js
y foo.coffee
archivos, ¿podemos hacer algo como rm -rf /tmp/foo.coffe[co]
eliminar el /tmp/foo.js
?
command-line
bash
rm
aneeshep
fuente
fuente
-rf
allí, ya que no son directorios (--recursive
) ni no escribibles (--force
).-rf
y no hay necesidad de hacer cosas como root. Especialmente si las cosas en cuestión involucranrm -rf
.[co]
globo de concha. Gracias.Respuestas:
[co]
no es un parámetro para elrm
comando: es un globo de shell que coincide con un patrón igual a un solo carácter del conjunto[co]
; en otras palabras, coincide con ac
oo
a al final del nombre de archivo. Deman bash
:Para hacer coincidir ambos
foo.coffee
yfoo.js
, puesto que los sufijos no contienen subcadenas comunes a todos, lo mejor que podría hacer esfoo.*
que coincida con cualquier nombre de archivo empezando porfoo.
el contrario usted podría utilizar la expansión de llaves por ejemplo,fuente
[abc]
o*
buscará archivos mientras{}
que no lo hará. vaya a / tmp, escribaecho nya[ab]; echo nya{a,b}
, luegotouch nyaa
y otra vezecho nya[ab]; echo nya{a,b}
No es un parámetro sino una colección de letras (o un "shell glob"). Esto es lo mismo:
es lo mismo que
Similar ...
eliminaría cualquier cosa
/tmp/hello.pyc
hasta e incluyendo el/tmp/hello.pyo
siguiente pedido ASCII.eliminaría ...
Puede crear métodos bastante sofisticados, pero para esos 2 archivos simplemente los eliminaría con 1 comando para cada uno. Otro ejemplo acercándose lo más posible a esos 2 archivos ...
eliminaría archivos como este ...
por lo tanto, incluiría mucho más que solo estos 2 archivos.
fuente
rm -rf
todas las coincidencias, no muchas invocaciones cada una con una coincidencia.Es un globo de shell, similar a los comodines
*
y?
... en bash, el patrón de nombre de archivo*.[co]
coincide con todos los nombres de archivo que terminan con.c
o.o
.La diferencia con
*.[co]
versus*.c *.o
o*.{c,o}
es que los dos últimos patrones se expandirán a un ficticio*.o
si no.o
existen archivos en el directorio, mientras que la*.[co]
versión no.Los globos de shell son útiles para realizar operaciones de archivo sin distinción entre mayúsculas y minúsculas. Por ejemplo, si usted tiene un montón de archivos con nombres de archivo que terminan con
jpg
,JPG
,Jpg
,JPg
, etc ... y desea eliminar todos ellos, que puede hacer:fuente