J'essaye ceci et cela ne fonctionne pas:
ls file_* | xargs mv {} temp/
Des idées?
J'essaye ceci et cela ne fonctionne pas:
ls file_* | xargs mv {} temp/
Des idées?
Réponses:
Sous OS X:
ls file_* | xargs -J {} mv {} temp/
Sous Linux:
ls file_* | xargs -i {} mv {} temp/
/
à la fin est facultatif. Vous pouvez l'inclure si vous le souhaitez, mais ce n'est pas nécessaire.
-i
(ou -J
) spécifiez un jeton qui sera remplacé par les arguments entrants, au lieu d'être simplement collés à la fin. man xargs
-i{}
, sans espace. Ou dites -I {}
.
-i
, il est remplacé. ls file_* | xargs -iFOO mv FOO temp/
fonctionne exactement de la même manière.
find . -name "file_*" -maxdepth 0 -exec mv {} temp/ \;
find
est meilleur que ls
là où il pourrait y avoir plus de fichiers que le nombre d'arguments du programme autorisé par votre shell.
file_*
fichiers du répertoire courant, tandis que find
(sans options supplémentaires) recherchera l'arborescence de répertoires entière sous le répertoire courant.
mv
peu importe si vous traitez des fichiers ensemble ou individuellement, d'autres utilisations pourraient le faire.
Comme suggéré par @ user1953864: { -i
, -J
} spécifiez un jeton qui sera remplacé par les arguments entrants.
Par exemple ls
:
something.java exampleModel.java NewsQueryImpl.java readme someDirectory/
Ensuite, déplacer tous les fichiers java dans le dossier someDirectory avec xargs
serait comme suit:
Sous Linux
ls *.java | xargs -i mv {} someDirectory/
Sur MacOS
ls *.java | xargs -J mv {} someDirectory
Une autre solution pourrait être:
for f in file_* ; do
mv $f temp/$f
done
L'inconvénient est qu'il crée un nouveau mv
processus pour chaque fichier.
xargs -n10
par exemple)