Lorsque j'exécute la commande suivante:
> mkdir some_dir
> find /foo/bar/ -name '*.csv' -print0 | xargs -0 mv {} some_dir
Je reçois des centaines de lignes qui disent:
mv: target `/foo/bar/XX.csv` is not a directory
Pourquoi? Je pensais que xargs exécuterait:
mv /foo/barXX.csv some_dir
pour chaque fichier find
trouvé. Que se passe-t-il? Au fait, c'est avec zsh
Mise à jour:
Update1:
J'ai essayé:
find /foo/bar/ -name '*.csv' -print0 | xargs -0 mv {} -t some_dir
mais j'ai eu quelques lignes comme:
mv: cannot stat `{}': No such file or directory
bien que je pense que la commande déplace correctement mes fichiers.
Update2:
Je ne semble pas avoir besoin de l' -t
option lorsque j'utilise mv
seul. Par exemple
> touch file1.txt
> touch file2.txt
> mkdir my_dir
> mv file1.txt file2.txt my_dir
fonctionne bien. Pourquoi ai-je besoin -t
lors de l'utilisation xargs
?
mv -t some_dir 1.csv 2.csv 3.csv ...
donc la dernière argumentation du fichier. C'est l'erreur dans la question, pour l'utiliser,{}
vous devez passer-I {}
àxargs
.-t
de plusieurs fichiers et d'un répertoire avec un réguliermv
?mv -t
.Vous pouvez également utiliser la commande ls au lieu de la commande find:
la source