"xargs" 명령을 사용하여 여러 파일 복사

"xargs" 명령을 사용하여 여러 파일 복사

명령어로 검색한 파일을 find현재 디렉터리에 복사하고 싶어요

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

"cp" 명령을 사용하여 현재 디렉터리에 파일 복사를 테스트합니다.

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

오류 발생:

    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

명령 대체를 통해 문제를 해결했습니다.

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

그것을 구현하는 방법 xargs?

답변1

cp오류에서 알 수 있듯이 대상 디렉터리는 마지막 디렉터리여야 합니다 . 해당 옵션 에 cp해당하는 GNU가 없는 것 같으므로 xargs를 사용하여 과 사이에 파일 이름을 삽입 해야 합니다 .cp-tcp.

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

where는 -I입력으로 대체될 문자열을 알려주는 데 사용됩니다(이 경우에는 it을 사용 _하지만 {}일반적으로 사용됩니다).

물론 이것은 스스로 할 수 있습니다 find:

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

관련 정보