Wenn ich den folgenden Befehl ausführe:
> mkdir some_dir
> find /foo/bar/ -name '*.csv' -print0 | xargs -0 mv {} some_dir
Ich bekomme Hunderte von Zeilen, die sagen:
mv: target `/foo/bar/XX.csv` is not a directory
Warum? Ich dachte, xargs würde ausführen:
mv /foo/barXX.csv some_dir
für jede Datei, die find
findet. Was ist los? Das ist übrigens bei zsh
Aktualisieren:
Update1:
Ich habe es versucht:
find /foo/bar/ -name '*.csv' -print0 | xargs -0 mv {} -t some_dir
aber dann habe ich ein paar Zeilen wie:
mv: cannot stat `{}': No such file or directory
obwohl ich denke, dass der Befehl meine Dateien korrekt verschiebt.
Update2:
Ich scheine die -t
Option nicht zu brauchen, wenn ich sie mv
alleine benutze . Zum Beispiel
> touch file1.txt
> touch file2.txt
> mkdir my_dir
> mv file1.txt file2.txt my_dir
funktioniert gut. Warum brauche ich -t
bei der Verwendung xargs
?
mv -t some_dir 1.csv 2.csv 3.csv ...
so, dass die Dateiargumente zuletzt sind. Das ist der Fehler in der Frage, zu verwenden , um{}
Sie zu übergeben-I {}
zuxargs
.-t
mit mehreren Dateien und einem Verzeichnis mit einem regulären brauchemv
?mv -t
.Sie können auch den Befehl ls anstelle des Befehls find verwenden:
quelle