Sous Linux, au moins, /à la fin est facultatif. Vous pouvez l'inclure si vous le souhaitez, mais ce n'est pas nécessaire.
Scott
4
@ user1953864: -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
Amadan
14
Vous pourriez avoir besoin de dire -i{}, sans espace. Ou dites -I {}.
Scott
1
Je remarque que l'utilisation de "%" à la place de "{}" fonctionne également - que signifie% et que signifie {}? Exemple: ls file_ * | xargs -I% mv% temp /
dmonopoly
3
@dmonopoly: Ils ne veulent rien dire . Quel que soit le paramètre -i, il est remplacé. ls file_* | xargs -iFOO mv FOO temp/fonctionne exactement de la même manière.
Notez que la question suggère un désir de ne traiter que les 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.
Scott
1
Oui c'est vrai. Ajoutez -maxdepth 0pour éviter cela.
"mieux" est subjectif. Plus puissant, plus complexe et plus lent; et même si mvpeu importe si vous traitez des fichiers ensemble ou individuellement, d'autres utilisations pourraient le faire.
Amadan
Modifié (ajouté -maxdepth 0)
8
Utilisez -t "spécifier la cible directe" sur mv, cela devrait fonctionner en déplaçant les fichiers * vers le répertoire de destination / temp
xargs -n10
par exemple)Réponses:
Sous OS X:
Sous Linux:
la source
/
à 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 quels
là où il pourrait y avoir plus de fichiers que le nombre d'arguments du programme autorisé par votre shell.la source
file_*
fichiers du répertoire courant, tandis quefind
(sans options supplémentaires) recherchera l'arborescence de répertoires entière sous le répertoire courant.-maxdepth 0
pour éviter cela.mv
peu importe si vous traitez des fichiers ensemble ou individuellement, d'autres utilisations pourraient le faire.-maxdepth 0
)Utilisez -t "spécifier la cible directe" sur mv, cela devrait fonctionner en déplaçant les fichiers * vers le répertoire de destination / temp
ex: - #ls -l fichier * | xargs mv -t / temp
la source
Comme suggéré par @ user1953864: {
-i
,-J
} spécifiez un jeton qui sera remplacé par les arguments entrants.Par exemple
ls
:Ensuite, déplacer tous les fichiers java dans le dossier someDirectory avec
xargs
serait comme suit:Sous Linux
Sur MacOS
la source
Une autre solution pourrait être:
L'inconvénient est qu'il crée un nouveau
mv
processus pour chaque fichier.la source