Me gustaría copiar archivos con múltiples extensiones en un solo directorio de destino.
Por ejemplo, puedo usar el siguiente comando para copiar todos los archivos .txt en el directorio de trabajo a un directorio llamado destination
:
cp -v *.txt destination/
Y puedo usar lo siguiente para copiar todos los directorios .png en el directorio de trabajo a destination
:
cp -v *.png destination/
Pero lleva mucho tiempo escribirlos como comandos separados (incluso con el uso del historial de comandos). Así que, ¿hay alguna manera de que yo puedo decir cp
que copiar los archivos, ya sea con el patrón *.txt
o el patrón *.png
a destination
? Idealmente, me gustaría ser capaz de especificar más de dos patrones - como instruir cp
a copiar todo *.txt
o *.png
o *.jpg
archivos a destination
, por ejemplo.
Estoy seguro de que todo esto es posible usando un script de shell, estoy usando bash
, por ejemplo, pero ¿hay alguna manera de lograrlo de manera más simple, solo desde la consola? ¿Podría de alguna manera usar la expansión de llaves para hacerlo?
Sé que es posible copiar todos los archivos en el directorio de trabajo, excepto aquellas que coinciden con ciertos patrones específicos , pero desde mi directorio de trabajo contiene muchos más extensiones de archivo que yo no quiero copiar a los que yo hago , que sería un dolor.
¿Tienes alguna idea sobre esto?
cp -v *.txt *.png destination/
?Respuestas:
La expansión de llaves hará el trabajo.
man bash
y buscarBrace Expansion
.EDITAR:
De acuerdo con la solicitud del OP, al comando anterior le faltaba la opción detallada:
fuente
cp data/images/*.{jpg,jpeg,png,mp4} destination/
ymp4
no existe un archivo, aparece unNo such file or directory
error que rompe el script. ¿Puedo hacer que las múltiples extensiones manejen con gracia los formatos faltantes?Eso está funcionando!
fuente