Nun, zum einen ist der -iSchalter veraltet:
-i[replace-str]
This option is a synonym for -Ireplace-str if replace-str is specified.
If the replace-str argument is missing, the effect is the same as -I{}.
This option is deprecated; use -I instead.
Als ich Ihren Befehl in diesen änderte, funktionierte es:
$ find /foo/bar -name '*.mp4' -print0 | xargs -I{} -0 mv -t /some/path {}
Beispiel
$ find . -print0 | xargs -I{} -0 echo {}
.
./.sshmenu
./The GIT version control system.html
./.vim_SO
./.vim_SO/README.txt
./.vim_SO/.git
./.vim_SO/.git/objects
./.vim_SO/.git/objects/pack
./.vim_SO/.git/objects/pack/pack-42dbf7fe4a9b431a51da817ebf58cf69f5b7117b.idx
./.vim_SO/.git/objects/pack/pack-42dbf7fe4a9b431a51da817ebf58cf69f5b7117b.pack
./.vim_SO/.git/objects/info
./.vim_SO/.git/refs
./.vim_SO/.git/refs/tags
...
Gebrauch von -I{}
Dieser Ansatz sollte nicht verwendet werden, da dieses Befehlskonstrukt ausgeführt wird:
$ find -print0 ... | xargs -I{} -0 ...
implizit schaltet dieser Schalter auf xargs, -xund -L 1. Das -L 1konfiguriert xargsso, dass es die Befehle aufruft, über die die Dateien auf eine einzige Weise ausgeführt werden sollen.
Dies macht den Zweck der Verwendung dieses Befehls xargszunichte, da der mvBefehl 1000-mal ausgeführt wird, wenn Sie 1000 Dateien angeben .
Welchen Ansatz soll ich dann verwenden?
Du kannst es mit xargs wie folgt machen:
$ find /foot/bar/ -name '*.mp4' -print0 | xargs -0 mv -t /some/path
Oder einfach alles finden lassen:
$ find /foot/bar/ -name '*.mp4' -exec mv -t /some/path {} +
"This approach shouldn't be used"welcher Ansatz sollte stattdessen verwendet werden? Wäre"find /foot/bar/ -name '*.csv' -print0 | xargs -0 mv -t some_dir'"eine bessere Lösung? Wenn ja, wie istxargsin diesem Fall wissen , wo in dermvBefehl - Feed in den Argumenten aus dem Rohr kommt? (Platziert es sie immer zuletzt?)