Copia i file cercati con il comando find utilizzando il comando xargs

2

Vorrei copiare i file cercati usando il comando find nella directory corrente. Sto eseguendo la seguente riga di comando:

    # 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 ..

Desidero copiare i file nella directory corrente usando il comando cp . Ecco il comando che ho inserito:

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

Tuttavia, ottengo un errore come mostrato di seguito all'esecuzione del comando precedente:

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

Ho anche provato a risolvere il problema usando la sostituzione di comando. Ecco il comando che ho provato:

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

Tuttavia, ottengo un altro errore come mostrato di seguito all'esecuzione del comando precedente:

cp: Blum,: No such file or directory

Come posso ottenere il risultato desiderato usando il comando xargs ?

    
posta JawSaw 28.03.2018 - 07:51
fonte

2 risposte

2

xargs aggiunge il suo input al comando, quindi stai fondamentalmente eseguendo cp . source_file . Usa

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

, invece.

    
risposta data 28.03.2018 - 08:39
fonte
1

Puoi anche ottenere facilmente il risultato desiderato senza utilizzare il comando xargs come mostrato di seguito:

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

Crea una riga di comando più semplice e non prevede piping.

    
risposta data 28.03.2018 - 08:55
fonte

Leggi altre domande sui tag