Zumindest unter Linux ist das /am Ende optional. Sie können es einschließen, wenn Sie möchten, aber es ist nicht erforderlich.
Scott
4
@ user1953864: -i(oder -J) geben Sie ein Token an, das durch die eingehenden Argumente ersetzt wird, anstatt sie nur am Ende anzuheften . man xargs
Amadan
14
Sie müssen möglicherweise-i{} ohne Leerzeichen sagen . Oder sagen -I {}.
Scott
1
Ich stelle fest, dass die Verwendung von "%" anstelle von "{}" ebenfalls funktioniert. Was bedeutet% und was bedeutet {}? Beispiel: ls file_ * | xargs -I% mv% temp /
dmonopoly
3
@dmonopoly: Sie haben nichts zu bedeuten . Was auch immer der Parameter -iist, er wird ersetzt. ls file_* | xargs -iFOO mv FOO temp/funktioniert genauso.
Beachten Sie, dass die Frage den Wunsch nahelegt, nur die file_*Dateien im aktuellen Verzeichnis zu verarbeiten, während find(ohne zusätzliche Optionen) der gesamte Verzeichnisbaum unter dem aktuellen Verzeichnis durchsucht wird.
Scott
1
Ja stimmt. Hinzufügen -maxdepth 0, um dies zu verhindern.
"besser" ist subjektiv. Stärker, komplexer und langsamer; und während mves egal ist, ob Sie Dateien zusammen oder einzeln verarbeiten, kann dies bei einigen anderen Anwendungen der Fall sein.
Amadan
Bearbeitet (hinzugefügt -maxdepth 0)
8
Verwenden Sie -t "Zielverzeichnis angeben" bei mv. Es sollte funktionieren, Dateien * in das Zielverzeichnis / temp zu verschieben
xargs -n10
zum Beispiel)Antworten:
Unter OS X:
Unter Linux:
quelle
/
am Ende optional. Sie können es einschließen, wenn Sie möchten, aber es ist nicht erforderlich.-i
(oder-J
) geben Sie ein Token an, das durch die eingehenden Argumente ersetzt wird, anstatt sie nur am Ende anzuheften .man xargs
-i{}
ohne Leerzeichen sagen . Oder sagen-I {}
.-i
ist, er wird ersetzt.ls file_* | xargs -iFOO mv FOO temp/
funktioniert genauso.find . -name "file_*" -maxdepth 0 -exec mv {} temp/ \;
find
ist besser als dort,ls
wo möglicherweise mehr Dateien als die Anzahl der von Ihrer Shell zugelassenen Programmargumente vorhanden sind.quelle
file_*
Dateien im aktuellen Verzeichnis zu verarbeiten, währendfind
(ohne zusätzliche Optionen) der gesamte Verzeichnisbaum unter dem aktuellen Verzeichnis durchsucht wird.-maxdepth 0
, um dies zu verhindern.mv
es egal ist, ob Sie Dateien zusammen oder einzeln verarbeiten, kann dies bei einigen anderen Anwendungen der Fall sein.-maxdepth 0
)Verwenden Sie -t "Zielverzeichnis angeben" bei mv. Es sollte funktionieren, Dateien * in das Zielverzeichnis / temp zu verschieben
Beispiel: - #ls -l Datei * | xargs mv -t / temp
quelle
Wie von @ user1953864 vorgeschlagen: {
-i
,-J
} Geben Sie ein Token an, das durch die eingehenden Argumente ersetzt wird.Zum Beispiel
ls
:Dann, um alle Java-Dateien in den someDirectory-Ordner mit zu verschieben,
xargs
wäre wie folgt:Unter Linux
Auf MacOS
quelle
Eine andere Lösung könnte sein:
Der Nachteil ist, dass es
mv
für jede Datei einen neuen Prozess gibt.quelle