2015-02-09 23 views
7

Il seguente comando:Come limitare i risultati del comando find in bash?

find . -name "file2015-0*" -exec mv {} .. \; 

colpisce circa 1500 risultati. A uno a uno spostano un livello precedente.

Se vorrei che i risultati non ecceda per esempio in 400? Come potrei?

+2

Se ci sono 1500 risultati, che 400 dovrebbe scegliere? Anche con un metodo deterministico (ad esempio alfabetico) sarebbe difficile indovinare quali file potrebbero essere restituiti o meno. Dovresti spiegare più in generale ciò che stai cercando di realizzare. – FatalError

+0

Ciao Fedorqui, grazie per la tua risposta! –

+0

Ciao Fedorqui, grazie per la tua risposta! Non importa l'ordine, ha solo circa 400 risultati in un momento. L'idea è di spostare 400 file perché un altro processo in esecuzione nel livello precedente diminuisce la sua perfomance. Voglio dire, per quell'esempio ci saranno mosse gloriose in quattro parti: 1 ° di 400, 2 ° di 400, 3 ° di 400 e 4 ° di 300. BR! –

risposta

8

Si può fare questo:

find . -name "file2015-0*" | head -400 | xargs -I filename mv filename .. 

Se si vuole simulare ciò che fa uso di echo:

find . -name "file2015-0*" | head -400 | xargs -I filename echo mv filename .. 
+0

Eccellente! Grazie mille Tiago! –

+0

Felice di averlo aiutato! per favore accetta la risposta se pensi che sia la migliore. – Tiago

+0

Sì! Lo accetterò! Davvero, stavo cercando un parametro di "find" per fermarlo quando i risultati 400 trovati ok (come crtl C ma lavorando da soli :)). Questo modo può essere applicato a una quantità superiore a 1500 e l'accesso al disco non sarà intenso. Comunque, oggi per il 1500 è davvero bello! BR Mariano –

0

potete per esempio fornire la find uscita in un ciclo while read e tenere traccia con un contatore:

counter=1 
while IFS= read -r file 
do 
    [ "$counter" -ge 400 ] && exit 
    mv "$file" .. 
    ((counter++)) 
done < <(find . -name "file2015-0*") 

Nota questo può portare a problemi se il nome del file contiene nuove linee ... che è abbastanza improbabile . Inoltre, si noti che il comando mv si sta spostando al livello superiore. Se vuoi che sia correlato al percorso della directory, qualche conversione bash può farcela.