¿Cómo puedo recorrer una carpeta y mover / copiar cada N º elemento?

4

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?

    
pregunta Zarfing 26.01.2016 - 03:03

1 respuesta

3

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 :)

    
respondido por el njboot 31.01.2016 - 01:40

Lea otras preguntas en las etiquetas