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 -n10
por 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/ \;
find
es mejor quels
donde 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 0
para evitar esto.mv
no 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
xargs
sería como sigue:En Linux
En MacOS
fuente
Otra solución podría ser:
La desventaja es que bifurca un nuevo
mv
proceso para cada archivo.fuente