archivos mv con | xargs


18

Solo estoy tratando de mover un montón de archivos (no enlaces simbólicos) de mi carpeta / etc / apache / sites-enabled a la carpeta / etc / apache / sites-available con lo siguiente:

/etc/apache2/sites-enabled$ find . -maxdepth 1 -type f | xargs mv {} ../sites-available/

pero soy un ubuntu n00b y obtengo este error:

mv: target `./real-file' is not a directory

donde 'real-file' es un archivo de prueba que configuré en mi entorno de desarrollo. Estoy tratando de ordenar el desorden de otra persona en un servidor de producción ;-)

Respuestas:


27

Puedes probar la -execopción con el findcomando,

/etc/apache2/sites-enabled$ sudo find . -maxdepth 1 -type f -exec mv {} /etc/apache2/sites-available \;

Para mover archivos propiedad de root, necesita sudopermisos.

Si desea usar el xargscomando, agregue la -Iopción.

find . -maxdepth 1 -type f | sudo xargs -I {} mv {} /etc/apache2/sites-available/

7

Idealmente, debería usar -print0 con find, para que los nombres de archivo con espacios no arruinen las cosas.

Por ejemplo, esto debería funcionar:

find . -whatever-flags-go-here -print0 | xargs -r0 mv -t target-directory

0

También puede usar otra forma de realizar lo mismo pero con un rendimiento adicional :

find . -maxdepth 1 -type f -exec mv {} /etc/apache2/sites-available \+

Tenga en cuenta que termina con los \+medios para que el comando find obtenga el resultado y se expanda para {}hacer lo que desea, de esta manera evita las dos opciones ( \;= para cada entrada Y canalización en un nuevo comando xargs)

Aquí está la explicación (también puede consultar el manual man find)

-exec command {} + Esta variante de la acción -exec ejecuta el comando especificado en los archivos seleccionados, pero la línea de comando se crea agregando cada nombre de archivo seleccionado al final; El número total de invocaciones del comando será mucho menor que el número de archivos coincidentes. La línea de comando se construye de la misma manera que xargs construye sus líneas de comando. Solo se permite una instancia de '{}' dentro del comando. El comando se ejecuta en el directorio de inicio.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.