특정 파일이 복사되지 않도록하는 cp 명령


35

'cp'명령을 사용하여 디렉토리를 복사하고 디렉토리 내의 특정 파일 / 하위 디렉토리를 제외시키는 방법이 있습니까?

답변:


57

사용 rsync:

rsync -avr --exclude='path1/to/exclude' --exclude='path2/to/exclude' source destination

사용합니다 sourcesource/다르다. 후행 폴더의 내용을 복사하는 수단 슬래시 source로를 destination. 슬래시가 없으면 폴더 소스를에 복사하는 것 destination입니다.

또는 제외 할 디렉토리 (또는 파일)가 많은 경우를 사용할 수 있습니다 --exclude-from=FILE. 여기서 제외 할 FILE파일 또는 디렉토리를 포함하는 파일 이름입니다.

--exclude 와 같은 와일드 카드를 포함 할 수도 있습니다. --exclude=*/.svn*

복사 한 곳 : https://stackoverflow.com/a/2194500/749232

cp자체적 으로 사용하려는 경우 :

find . -type f -not -iname '*/not-from-here/*' -exec cp '{}' '/dest/{}' ';'

이것은 목표 디렉토리 구조가 소스와 동일하다고 가정합니다.

복사 한 곳 : https://stackoverflow.com/a/4586025/749232


3

게임에 늦었지만 여기에는 일반 bash 및 cp를 사용하는 매우 다른 솔루션이 있습니다. 일부 파일은 무시하면서 전역 파일 사양을 사용할 수 있습니다.

디렉토리에 파일이 있다고 가정하십시오.

$ ls *
listed1  listed2  listed3  listed4  unlisted1  unlisted2  unlisted3

은 Using GLOBIGNORE의 변수를 :

$ export GLOBIGNORE='unlisted*'
$ ls *
listed1  listed2  listed3  listed4

또는 더 구체적인 제외 사항이있는 경우 :

$ export GLOBIGNORE='unlisted1:unlisted2'
$ ls *
listed1  listed2  listed3  listed4  unlisted3

또는 제외 어 일치 사용 :

$ ls !(unlisted*)
listed1  listed2  listed3  listed4

또한 여러 가지 일치하지 않는 패턴을 지원합니다.

$ ls !(unlisted1|unlisted2)
listed1  listed2  listed3  listed4  unlisted3

1
부정적 일치의 경우 확장 글로브를 활성화해야합니다 : shopt -s extglob, 또한 내보낼 필요가 없습니다 GLOBIGNORE: 현재 쉘의 동작을 수정해야하므로 대부분의 자식 프로그램은 신경 쓰지 않습니다.
muru
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.