전체 파일이 아닌 일부 파일을 복사하는 방법은 무엇입니까?

전체 파일이 아닌 일부 파일을 복사하는 방법은 무엇입니까?

따라서 디렉터리 컨텍스트에서 사용되는 경우 *모든 파일에 대해 와일드카드 문자로 사용할 수 있습니다. 파일만 빼고 다 cp복사할 수 있는 방법이 있나요 ?x

답변1

Rsync는 이 문제를 매우 잘 처리합니다.

모든 예시를 복사하세요.rsync -aP /folder1/* /folder/2

모두 복사하고 제외하는 예:rsync -aP --exclude=x /folder1/* /folder2/

스위치 -aP:

  • acp -a: , 재귀적 등과 유사합니다 .
  • P: rsync의 좋은 기능인 진행 상황을 표시합니다.

답변2

bash당신이 사용할 수 있는 곳 extglob:

 $ shopt -s extglob  # to enable extglob
 $ cp !(b*) new_dir/

!(b*)모든 파일은 여기에서 제외됩니다 b*.

extglob나중에 비활성화 할 수 있습니다 .

 $ shopt -u extglob

답변3

cp이는 의 기능이 아니라 셸의 기능 이므로( *닷이 아닌 모든 파일로 확장됨) 대답은 사용하는 셸에 따라 다릅니다. 예를 들어 zsh다음 구문이 지원됩니다.

$ cp ^x /path/to/destination

이는 "를 ^x제외한 모든 파일을 의미합니다.x

선택 모드와 선택 취소 모드를 결합할 수도 있습니다. 예를 들어 xyz가 포함된 파일을 제외한 모든 wav 파일을 복사할 수 있습니다.

cp *.wav~*xyz*

답변4

표준 도구를 사용하여 일반 기존(휴대용/호환) Bourne 쉘에서 다양한 방법으로 수행할 수도 있지만 고급 쉘 와일드카드나 기본 제공 제외 옵션이 있는 명령을 사용하는 것보다 훨씬 덜 효율적인 방법입니다.

파일이 너무 많지 않고 이름에 공백 및/또는 개행 문자가 포함되어 있지 않은 경우 다음 방법이 될 수 있습니다.

cp `ls | egrep -v '^excludename$'` destdir/.

물론, bashGNU 도구는 훌륭하고 강력하지만 여전히 항상 사용할 수 있는 것은 아닙니다. 이것을 휴대용 스크립트에 넣을 계획이라면 findRush의 의견을 추천합니다.

관련 정보