2015-02-09 8 views
7

folgenden Befehl ein:Wie beschränke ich die Ergebnisse des Befehls in bash suchen?

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

Beeinflusst etwa 1500 Ergebnisse. Einer nach dem anderen bewegen sie ein vorheriges Level.

Wenn ich würde, dass die Ergebnisse beispielsweise in 400 nicht überschreiten? Wie könnte ich?

+2

Wenn es 1500 Ergebnisse sind, welche 400 sollte es wählen? Selbst mit einer deterministischen Art (z. B. alphabetisch) wäre es schwierig zu erraten, welche Dateien zurückgegeben werden könnten oder nicht. Sie sollten breiter erklären, was Sie erreichen möchten. – FatalError

+0

Hallo Fedorqui, danke für deine Antwort! –

+0

Hallo Fedorqui, danke für deine Antwort! Es spielt keine Rolle in der Reihenfolge, hat nur etwa 400 Ergebnisse zu einem Zeitpunkt. Die Idee ist, 400 Dateien zu verschieben, weil ein anderer Prozess, der in der vorherigen Ebene ausgeführt wird, seine Leistung verringert. Ich meine, für dieses Beispiel wird glorreichen Bewegungen in vier Teile: 1. 400, 2. 400, 3. 400 und 4. 300. BR! –

Antwort

8

Sie können dies tun:

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

Wenn Sie möchten, simulieren, was es echo nicht verwendet:

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

Ausgezeichnet! Vielen Dank Tiago! –

+0

Froh, dass es geholfen hat! Bitte akzeptiere die Antwort, wenn du denkst, das ist die beste Antwort. – Tiago

+0

Ja! Ich werde es akzeptieren! Wirklich, ich war auf der Suche nach einem Parameter von "finden", um es zu stoppen, wenn die 400 Ergebnisse gefunden ok (wie crtl C, aber allein arbeiten :)). Dieser Weg könnte auf eine große Menge mehr als 1500 angewendet werden und der Zugriff auf die Festplatte wird nicht intensiv sein. Wie auch immer, heute für 1500 ist es wirklich in Ordnung! BR Mariano –

0

können Sie zum Beispiel bieten die find Ausgabe in eine while read Schleife und verfolgen mit einem Zähler:

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

Hinweis dies zu Problemen führen kann, wenn der Dateiname neue Zeilen enthält ... was ziemlich unwahrscheinlich ist, . Beachten Sie auch, dass sich der Befehl jetzt auf die obere Ebene bewegt. Wenn Sie möchten, dass es mit dem Pfad des Verzeichnisses in Beziehung steht, kann dies durch eine Bash-Konvertierung erreicht werden.

Verwandte Themen