Rekursive Verschieben von Dateien eines bestimmten Typs in einen bestimmten Pfad

3988
macek

In ~ / my / path möchte ich alle Dateien verschieben, die die Zeichenfolge "(J)" enthalten und den Dateityp ".foo" nach ~ / my / path / j haben

Ich versuche:

[me ~/my/path]$ find -type f -name "*(J)*.foo" -print0 | xargs mv -0 j/

Kein Glück :(

1

3 Antworten auf die Frage

4
John T

Wie wäre es mit

find ~ / my / path -type f -name "* (J) *. foo" -exec mv {} ~ / my / path / j \;
Das hat super funktioniert; Vielen Dank! macek vor 14 Jahren 0
Ich wusste nicht, dass Sie wirklich die Klammern um das J haben wollten, fügte sie nur hinzu. Du bist mehr als willkommen. John T vor 14 Jahren 0
John T, Diese Lösung scheint sehr elegant und effizient zu sein, aber ich habe Schwierigkeiten zu verstehen, was das wirklich bedeutet. Ich verstehe, dass dies die "Variable" ist, die für den Befehl mv verwendet wird, aber was kann die {} sonst noch? Und nur zur Klarstellung, das \; wird verwendet, um die exec zu beenden? macek vor 14 Jahren 0
Bei der Verwendung von "-exec" mit "\;" wird "{}" durch die aktuelle Datei oder das Verzeichnis ersetzt, das Ihren Kriterien entspricht. `\;` wird für jedes gefundene Ergebnis eine neue `mv`-Operation durchführen. HTH. John T vor 14 Jahren 0
3
Dennis Williamson

Das -0muss gleich nach dem gehen xargs.

find -type f -name "*(J)*.foo" -print0 | xargs -0 -I{} mv \{\} j/ 

Übrigens hilft das Posten einer Fehlermeldung oder anderer Details anstelle von "kein Glück" bei der Diagnose von Problemen.

Ich habe das auch versucht und bekam folgende Ausgabe: usage: mv [-f | -i | -n] [-v] Quellziel mv [-f | -i | -n] [-v] Quellverzeichnis ... macek vor 14 Jahren 0
Entschuldigung, ich habe vergessen, die geschweiften Klammern einzusetzen. Dennis Williamson vor 14 Jahren 0
0
user38328

How about

mv `find -name *(J)*.foo` -t /my/path 
Bei dieser Lösung erhalten Sie möglicherweise die Fehlermeldung "Argumentliste zu lang". In diesem Fall arbeitete der von Dennis vorgeschlagene für mich. user38328 vor 13 Jahren 0