Verwenden Sie xargs, um ein Verzeichnis von Suchergebnissen in ein anderes Verzeichnis zu verschieben
Habe ich den folgenden Befehl:
find . -type d -mtime 0 -exec mv {} /path/to/target-dir \;
Damit verschieben Sie das Verzeichnis gegründet, um ein anderes Verzeichnis. Wie kann ich xargs
statt exec
um das gleiche zu tun.
InformationsquelleAutor der Frage zjhui | 2012-12-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hast du GNU
mv
(undfind
undxargs
), können Sie die-t
optionmv
(und-print0
fürfind
und-0
fürxargs
):Beachten Sie, dass moderne Versionen von
find
(kompatibel mit POSIX 2008) unterstützen+
im Ort;
und Verhalten sich in etwa das gleiche wiexargs
ohne Verwendungxargs
:Diese macht
find
Gruppe bequem zahlen von Datei (Verzeichnis -) Namen in einen einzigen Aufruf des Programms. Sie haben nicht die Kontrolle über die Zahl der Argumente, die übergebenmv
dassxargs
bietet, Sie aber nur selten wirklich brauchen sowieso. Diese noch Scharniere auf der-t
option GNUmv
.InformationsquelleAutor der Antwort Jonathan Leffler
Mit BSD xargs (für OS X und FreeBSD), die Sie verwenden können
-J
gebaut wurde:Würden irgendetwas bewegen matching
some_pattern
im.
zutarget_location
Mit GNU-xargs (für Linux und Cygwin), verwenden Sie
-I
statt:Des veralteten
-i
option des GNU-xargs impliziert-I{}
und kann wie folgt verwendet werden:Beachten Sie, dass BSD xargs hat auch eine
-I
option, aber das bedeutet etwas anderes.InformationsquelleAutor der Antwort user974202
finden:
mit der option
-print0
, die Ausgabe endet mit '\0';xargs:
mit der option
-0
es wird geteilt, args, die durch '\0' Leerzeichen-r
bedeutet no-run-if-empty, so erhalten Sie keine Fehler, wennfind
nicht bekomme keine Ausgabe. (Die-r
ist eine GNU-Erweiterung.)Normalerweise verwende ich diese in den scripts, wenn ich nicht sicher bin, ob die Ziel-Dateien vorhanden sind oder nicht.
InformationsquelleAutor der Antwort Evans Y.
find
ist nicht wirklich ein gutes Werkzeug für diese. Ich kann mir vorstellen, das Sie verschieben möchten alle Unterverzeichnisse in ein anderes Verzeichnis.find
ausgegeben wird Dinge wieNach
./a
bekommt zuerst bewegt, dann bekommst du nur Fehler über "keine solche Datei oder das Verzeichnis' alle Unterverzeichnisse.Sollten Sie nur verwenden
mv *//another/place
-- der nachgestellte Schrägstrich auf die wildcard schränkt die expansion nur dirs.InformationsquelleAutor der Antwort glenn jackman
Wenn Sie nicht mit der GNU-mv, verwenden Sie diesen Befehl:
ansonsten, hier ist eine einfachere Lösung, die nicht erforderlich ist, xargs:
Beachten Sie, dass ich Hinzugefügt -Tiefe sonst musst du die Fehler, wenn beide in einem Verzeichnis und einem seiner Unterverzeichnisse verarbeitet werden.
InformationsquelleAutor der Antwort jlliagre