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