Quiero hacer un lapso de tiempo desde una carpeta de imágenes, pero son demasiadas y el lapso de tiempo avanza lentamente. ¿Cómo selecciono, por ejemplo, cada décimo elemento, y copio o muevo los elementos a una carpeta separada?
Quiero hacer un lapso de tiempo desde una carpeta de imágenes, pero son demasiadas y el lapso de tiempo avanza lentamente. ¿Cómo selecciono, por ejemplo, cada décimo elemento, y copio o muevo los elementos a una carpeta separada?
La forma más rápida es usar la sintaxis bash
y awk
en su Terminal.app
for file in 'find /SOURCE/DIR -type f | awk 'NR %10 == 0''; do echo mv $file /DEST/DIR ; done
La instrucción for
introduce el bash loop
, para iterar a través de un conjunto de datos donde file
es la variable.
find
analiza el /SOURCE/DIR
para lo que se especifica.
|
actúa como una pipa, pasando stout desde find
de nuevo a stdin
awk
interpreta la entrada estándar e imprime solo las líneas que cumplen con las condiciones especificadas por 'NR %10 == 0’
NR
es un awk built-in variable
que especifica el número de registro / línea a evaluar.
%
es un numerical operator
que le dice a awk que los siguientes caracteres deben tratarse como tales.
==
es un operador relacional para must be equal to..
0
es la expresión binaria para TRUE
Por lo tanto, es muy elegante para "encontrar cada décimo archivo que existe en este directorio y mostrarlo ;
do
introduce la acción a realizar en la salida. echo
se usa para volver a verificar el comando, cuyos resultados se imprimirán en stout. Si todo se ve bien, elimínelo y realice la acción ( mv
, cp
) mv
es un comando bash incorporado para tomar un archivo y moverlo (o renombrarlo). cp
es otro comando bash integrado para mv un archivo de un directorio. a otro conservando el original. Puede sustituir directamente cp
por mv
si desea conservar el contenido del directorio original. $file
hace referencia a la variable file
que ahora se ha definido. Entonces, todo esto es sofisticado para dígame qué sucede cuando ... ( echo
) " move
(o, copy
) todos los archivos especificados por los parámetros anteriores en este otro directorio;"
done
Eso es todo lo que necesitas para decirle a bash que termine el ciclo desde que terminaste :)