En Linux, al menos, /al final es opcional. Puede incluirlo si lo desea, pero no es necesario.
Scott
44
@ user1953864: -i(o -J) especifique un token que se reemplazará con los argumentos entrantes, en lugar de que simplemente se agreguen al final. man xargs
Amadan
14
Puede que tenga que decir -i{}, sin un espacio. O decir -I {}.
Scott
1
Noté que usar "%" en lugar de "{}" también funciona: ¿qué significa% y qué significa {}? Ejemplo: ls file_ * | xargs -I% mv% temp /
dmonopoly
3
@dmonopoly: No significan nada. Cualquiera que sea el parámetro -i, se está reemplazando. ls file_* | xargs -iFOO mv FOO temp/Funciona exactamente igual.
Tenga en cuenta que la pregunta sugiere un deseo de procesar solo los file_*archivos en el directorio actual, mientras que find(sin opciones adicionales) buscará todo el árbol de directorios en el directorio actual.
Scott
1
Si verdad. Agregar -maxdepth 0para evitar esto.
"mejor" es subjetivo. Más poderoso, más complejo y más lento; y aunque mvno le importa si procesa archivos juntos o individualmente, algunos otros usos podrían hacerlo.
Amadan
Editado (agregado -maxdepth 0)
8
Use -t "especifique el direccionamiento objetivo" en mv, debería funcionar moviendo archivos * al directorio de destino / temp
xargs -n10por ejemplo)Respuestas:
En OS X:
En Linux:
fuente
/al final es opcional. Puede incluirlo si lo desea, pero no es necesario.-i(o-J) especifique un token que se reemplazará con los argumentos entrantes, en lugar de que simplemente se agreguen al final.man xargs-i{}, sin un espacio. O decir-I {}.-i, se está reemplazando.ls file_* | xargs -iFOO mv FOO temp/Funciona exactamente igual.find . -name "file_*" -maxdepth 0 -exec mv {} temp/ \;findes mejor quelsdonde pueda haber más archivos que la cantidad de argumentos de programa permitidos por su shell.fuente
file_*archivos en el directorio actual, mientras quefind(sin opciones adicionales) buscará todo el árbol de directorios en el directorio actual.-maxdepth 0para evitar esto.mvno le importa si procesa archivos juntos o individualmente, algunos otros usos podrían hacerlo.-maxdepth 0)Use -t "especifique el direccionamiento objetivo" en mv, debería funcionar moviendo archivos * al directorio de destino / temp
ex: - #ls -l archivo * | xargs mv -t / temp
fuente
Según lo sugerido por @ user1953864: {
-i,-J} especifique un token que se reemplazará con los argumentos entrantes.Por ejemplo
ls:Luego, para mover todos los archivos java a la carpeta someDirectory con
xargssería como sigue:En Linux
En MacOS
fuente
Otra solución podría ser:
La desventaja es que bifurca un nuevo
mvproceso para cada archivo.fuente