Copie vários arquivos usando o comando 'xargs'

1

Eu gostaria de copiar os arquivos pesquisados pelo comando find para o diretório currernt

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

Teste para copiar os arquivos para o diretório atual usando o comando 'cp'

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

Obter erro:

    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

Eu resolvo o problema com a substituição de comandos

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

Como fazer isso com xargs ?

    
por JawSaw 28.03.2018 / 04:04

1 resposta

2

Como o erro cp indica, o diretório de destino deve ser o último. Como parece que o seu cp não tem o equivalente da opção cp do GNU -t , você precisa obter xargs para inserir o nome do arquivo entre cp e . :

find ... | xargs -0 -I _ cp _ .

onde -I é usado para informar qual string deve ser substituída pela entrada (neste caso, estou usando _ , embora {} também seja comumente usado).

Claro, isso pode ser feito com find :

find ~ -type f -iregex '.*linux.*\.pdf' -exec cp {} . \;
    
por 28.03.2018 / 04:09

Tags