Estoy intentando esto y no funciona:
ls file_* | xargs mv {} temp/
¿Algunas ideas?
Estoy intentando esto y no funciona:
ls file_* | xargs mv {} temp/
¿Algunas ideas?
Respuestas:
En OS X:
ls file_* | xargs -J {} mv {} temp/
En Linux:
ls file_* | xargs -i {} mv {} temp/
/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 que lsdonde pueda haber más archivos que la cantidad de argumentos de programa permitidos por su shell.
file_*archivos en el directorio actual, mientras que find(sin opciones adicionales) buscará todo el árbol de directorios en el directorio actual.
mvno le importa si procesa archivos juntos o individualmente, algunos otros usos podrían hacerlo.
Según lo sugerido por @ user1953864: { -i, -J} especifique un token que se reemplazará con los argumentos entrantes.
Por ejemplo ls:
something.java exampleModel.java NewsQueryImpl.java readme someDirectory/
Luego, para mover todos los archivos java a la carpeta someDirectory con xargssería como sigue:
En Linux
ls *.java | xargs -i mv {} someDirectory/
En MacOS
ls *.java | xargs -J mv {} someDirectory
Otra solución podría ser:
for f in file_* ; do
mv $f temp/$f
done
La desventaja es que bifurca un nuevo mvproceso para cada archivo.
xargs -n10por ejemplo)