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

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

따라서 디렉터리 컨텍스트 내에서 *사용할 때 모든 파일에 대해 와일드카드로 사용할 수 있습니다. 파일을 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의 의견과 같이 권장합니다.

관련 정보