Preparé un script para hacer algunas operaciones de archivos por mí. Estoy usando el operador comodín *
para aplicar funciones a todos los archivos de un tipo, pero hay una cosa que no entiendo. Puedo unzip
todos los archivos en una carpeta como esta
unzip "*".zip
Sin embargo, para eliminar todos los archivos zip después, debo hacer
rm *.zip
Es decir, no quiere las comillas. La descompresión, por otro lado, no funciona si solo le doy el * (me da una advertencia de que "los archivos no coincidieron").
¿Por qué es esto diferente? Para mí, esto parece exactamente la misma operación. ¿O estoy usando el comodín incorrectamente?
Las introducciones al comodín en Unix realmente no entran en esto, y no pude ubicar nada en el rm
o zip
documentos.
Estoy usando la terminal en una Mac (Yosemite).
Respuesta aceptada:
Has explicado muy bien la situación. La última pieza del rompecabezas es unzip
puede manejar comodines por sí mismo:
http://www.info-zip.org/mans/unzip.html
ARGUMENTOS
archivo[.zip]
…
Las expresiones comodín son similares a las admitidas en los shells Unix de uso común (sh, ksh, csh) y pueden contener:
* coincide con una secuencia de 0 o más caracteres
Al citar el comodín *, impidió que su shell lo expandiera, por lo que unzip
ve el comodín y trata de expandirlo de acuerdo con su propia lógica.
rm
, por el contrario, no admite comodines por sí solo , por lo que intentar citar un comodín le indicará a rm
para buscar un asterisco literal en el nombre del archivo.
La razón por la que unzip *.zip
no funciona es que unzip
La sintaxis de ‘simplemente no permite múltiples archivos zip; si hay varios parámetros, espera que el segundo y los subsiguientes sean archivos en el archivo:
descomprimir [-Z] [-cflptTuvz[abjnoqsCDKLMUVWX$/:^]] archivo[.zip] [archivo(s) …] [-x xarchivo(s) …] [-d exdir]