Copie los archivos buscados con el comando find utilizando el comando xargs

2

Me gustaría copiar los archivos buscados usando el comando find en el directorio actual. Estoy ejecutando la siguiente línea de comandos:

    # find linux books
$ find ~ -type f -iregex '.*linux.*\.pdf' -print0 | xargs -0 echo
    # Expected output on STDOUT
../Books/LinuxCollection/Linux_TLCL-17.10.pdf ../Richard Blum, Christine Bresnahan - Linux Command Line and Shell Scripting Bible, 3rd Edition - 2015.pdf ..

Deseo copiar los archivos al directorio actual usando el comando cp . Aquí está el comando que ingresé:

$ find ~ -type f -iregex '.*linux.*\.pdf' -print0 | xargs -0 cp .

Sin embargo, recibo un error como se muestra a continuación al ejecutar el comando anterior:

usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] source_file target_file
       cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] source_file ... target_directory

También he intentado resolver el problema utilizando la sustitución de comandos. Aquí está el comando que probé:

$ cp $(find ~ -type f -iregex '.*linux.*\.pdf' -print0) .

Sin embargo, recibo otro error como se muestra a continuación al ejecutar el comando anterior:

cp: Blum,: No such file or directory

¿Cómo puedo lograr el resultado deseado con el comando xargs ?

    
pregunta JawSaw 28.03.2018 - 07:51

2 respuestas

2

xargs agrega su entrada al comando, por lo que básicamente está ejecutando cp . source_file . Utilizar

find ~ -type f -iregex '.*linux.*\.pdf' -print0 | xargs -I '{}' -0 cp '{}' .

en su lugar.

    
respondido por el nohillside 28.03.2018 - 08:39
1

También puede lograr el resultado deseado fácilmente sin usar el comando xargs como se muestra a continuación:

find ~ -type f -iregex '.*linux.*\.pdf' -print0 -exec cp {} . \;

Compensa una línea de comando más simple y no involucra tuberías.

    
respondido por el Nimesh Neema 28.03.2018 - 08:55

Lea otras preguntas en las etiquetas