따라서 디렉터리 컨텍스트에서 사용되는 경우 *
모든 파일에 대해 와일드카드 문자로 사용할 수 있습니다. 파일만 빼고 다 cp
복사할 수 있는 방법이 있나요 ?x
답변1
Rsync는 이 문제를 매우 잘 처리합니다.
모든 예시를 복사하세요.rsync -aP /folder1/* /folder/2
모두 복사하고 제외하는 예:rsync -aP --exclude=x /folder1/* /folder2/
스위치 -aP
:
a
cp -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/.
물론, bash
GNU 도구는 훌륭하고 강력하지만 여전히 항상 사용할 수 있는 것은 아닙니다. 이것을 휴대용 스크립트에 넣을 계획이라면 find
Rush의 의견을 추천합니다.