Voglio fare un intervallo di tempo da una cartella di immagini, ma ce ne sono troppe e il lasso di tempo procede lentamente. Come posso selezionare, ad esempio, ogni 10 articoli e copiare o spostare gli elementi in una cartella separata?
Il modo più rapido è utilizzare la sintassi bash
e awk
nel tuo Terminal.app
for file in 'find /SOURCE/DIR -type f | awk 'NR %10 == 0''; do echo mv $file /DEST/DIR ; done
L'istruzione for
introduce bash loop
, per scorrere un insieme di dati in cui file
è la variabile.
find
analizza /SOURCE/DIR
per ciò che è specificato.
|
funge da pipe, passando stout da find
indietro a stdin
awk
interpreta lo stdin e stampa solo le linee che soddisfano le condizioni specificate da 'NR %10 == 0’
NR
è un awk built-in variable
che specifica il numero di record / linea da valutare.
%
è un numerical operator
che dice awk che i seguenti caratteri devono essere trattati come tali.
==
è operatore relazionale per must be equal to..
0
è l'espressione binaria per TRUE
Quindi, è tutto stravagante per "trova ogni 10 file che esiste in questa directory e lo manda in uscita ;
do
introduce l'azione da eseguire sull'output. echo
è usato per ricontrollare il comando, i cui risultati saranno stampati su stout. Se tutto sembra a posto, rimuovilo ed esegui l'azione ( mv
, cp
) mv
è un comando bash incorporato per prendere un file e spostarlo (o rinominarlo). cp
è un altro comando bash incorporato per mv un file da una directory. ad un altro preservando l'originale. Puoi sostituire direttamente cp
per mv
se desideri preservare il contenuto della directory originale. $file
fa riferimento alla variabile file
che è stata ora definita. Quindi è tutto molto bello per dimmi cosa succede quando I ... ( echo
) " move
(o, copy
) tutti i file specificati dai precedenti parametri in questa altra directory;"
done
Questo è tutto ciò che serve per dire a bash di terminare il ciclo da quando hai finito:)