Cuando ejecuto el siguiente comando:
> mkdir some_dir
> find /foo/bar/ -name '*.csv' -print0 | xargs -0 mv {} some_dir
Recibo cientos de líneas que dicen:
mv: target `/foo/bar/XX.csv` is not a directory
¿Por qué? Pensé que los xargs se ejecutarían:
mv /foo/barXX.csv some_dir
por cada archivo que find
encuentre. ¿Que esta pasando? Por cierto, esto es con zsh
Actualizar:
Actualización1:
Lo intenté:
find /foo/bar/ -name '*.csv' -print0 | xargs -0 mv {} -t some_dir
pero luego obtuve algunas líneas como:
mv: cannot stat `{}': No such file or directory
aunque creo que el comando está moviendo mis archivos correctamente.
Actualización2:
Parece que no necesito la -t
opción cuando lo uso mv
solo. Por ejemplo
> touch file1.txt
> touch file2.txt
> mkdir my_dir
> mv file1.txt file2.txt my_dir
funciona bien. ¿Por qué necesito -t
al usar xargs
?
mv -t some_dir 1.csv 2.csv 3.csv ...
para que los argumentos del archivo sean los últimos. Ese es el error en la cuestión, con el fin de utilizar{}
lo que tiene que pasar-I {}
axargs
.-t
varios archivos y un directorio con un archivo regularmv
?mv -t
.También puede usar el comando ls en lugar del comando find:
fuente