답변:
에서 bash
사용할 수 extglob
:
$ shopt -s extglob # to enable extglob
$ cp !(b*) new_dir/
여기서 !(b*)
모든 제외 b*
파일을.
나중에 해제 할 수 있습니다 extglob
로
$ shopt -u extglob
find
유일한 방법 인 것 같습니다 tcsh
:find . -maxdepth 1 ! -name "exclude*" -exec cp -t destination {} \+
Rsync는 이것을 잘 처리합니다.
모두 복사 예 : rsync -aP /folder1/* /folder/2
제외와 함께 모두 복사 예 : rsync -aP --exclude=x /folder1/* /folder2/
-aP
스위치 :
a : cp -a
, recursive 등과 유사합니다 . P : rsync의 훌륭한 기능인 진행률을 보여줍니다.
-rP
대신 사용하십시오 -aP
. -a
보관 용입니다. 이것이 변경되었는지 또는 MacOS와 다른지 확실하지 않습니다.
rsync
재귀 적으로 만들 수있는 옵션이 있습니다. 예 : rsync --recursive -P --exclude=x /folder1/* /folder2/
. (우분투에서만 테스트)
이것은의 기능이 아니며 cp
쉘의 기능입니다 ( *
도트가 아닌 모든 파일을 의미 하도록 확장 됨 ). 대답은 사용중인 쉘에 따라 다릅니다. 예를 들어 zsh
다음 구문을 지원합니다.
$ cp ^x /path/to/destination
여기서 ^x
"를 제외한 모든 파일 x
"
예를 들어 xyz가 포함 된 파일을 제외한 모든 wav 파일을 복사하기 위해 선택 및 선택 취소 패턴을 결합 할 수도 있습니다.
cp *.wav~*xyz*
bash
?
고급 셸 globbing 또는 기본 제공 제외 옵션이있는 명령을 사용하는 것보다 훨씬 덜 우아한 방법으로 표준 도구를 사용하여 다양한 방법으로 일반 오래된 (휴대용 / 호환 가능한) Bourne 셸에서 수행 할 수도 있습니다.
파일이 너무 많지 않은 경우 (공백 및 / 또는 줄 바꿈을 포함한 이름이없는) 방법은 다음과 같습니다.
cp `ls | egrep -v '^excludename$'` destdir/.
물론 bash
GNU 도구는 강력하고 강력하지만 항상 사용할 수있는 것은 아닙니다. 이식 가능한 스크립트에 넣으려면 find
Rush의 의견과 같이 권장 합니다.
폴더의 모든 항목 (하위 폴더 포함)을 특정 하위 디렉토리로 복사하려면 다음을 수행하십시오.
cp -R $(ls | grep -v '^subdir$') subdir/
sh, bash, zsh (적어도)와 함께 작동합니다.
cp -R * subdir/
cp
( bash
/가 아닌 sh
) " cp: cannot copy a directory, ‘subdir’, into itself, ‘subdir/subdir’
" 경고를 피하려고합니다 . 그러나 복사가 올바르게 완료됩니다. 불행히도 변형은 공백이나 셸 구분 구두점을 포함하는 파일 이름으로 중단됩니다. 참조 unix.stackexchange.com/q/128985/135943
extglob
지금까지 내가 생각하는 가장 좋은 방법입니다.
다른 방법은
cp $(ls --ignore=x) subdir/
$
등)의 출력을 구문 분석하지 마십시오 ls
. unix.stackexchange.com/q/128985/135943