Quiero hacer un time lapse de una carpeta de imágenes, pero hay demasiados y el lapso de tiempo que avanza lentamente. ¿Cómo puedo seleccionar, por ejemplo, una de cada 10 elemento, y copiar o mover los elementos en una carpeta separada?
Respuesta
¿Demasiados anuncios?La manera más rápida es usar bash
y awk
de sintaxis en su Terminal.aplicación
for file in `find /SOURCE/DIR -type f | awk 'NR %10 == 0'`; do echo mv $file /DEST/DIR ; done
for
declaración introduce la bash loop
, para iterar a través de un conjunto de datos donde file
es la variable.
find
analiza la /SOURCE/DIR
para que se especifica.
|
actúa como un tubo, pasando stout de find
de vuelta a stdin
awk
interpreta stdin y se imprime sólo las líneas que cumplan las condiciones especificadas por 'NR %10 == 0'
NR
esawk built-in variable
que especifica el registro/número de línea para ser evaluados.%
esnumerical operator
de decirle a awk que el carácter siguiente(s) deben ser tratadas como tales.==
es el operador relacional paramust be equal to..
0
es la expresión binaria deTRUE
Bueno, eso es todo de lujo para "encontrar una de cada 10 archivo que existe en este directorio y salida;
-
do
introduce la acción a realizar en la salida. -
echo
se utiliza para corroborar el comando, los resultados de lo que va a ser impreso en la stout. Si todo se ve bien, eliminar y realizar la acción (mv
,cp
) -
mv
está integrado en el comando de bash para tomar un archivo y mover(o cambiarle el nombre). -
cp
es otro construido en el comando de bash para mv un archivo de un directorio. a otro conservando el original. Usted puede directamente sustitutocp
paramv
si desea conservar el contenido del directorio original. -
$file
hace referencia a lafile
variable que ya ha sido definido.
Así que, eso es todo lujo de decirme qué pasa cuando voy a...(echo
) "move
(o, copy
) de todos los archivos especificados por los parámetros anteriores a este otro directorio;"
done
Eso es todo lujo de decirle a bash para terminar el bucle, ya que está hecho :)