특정 하위 디렉토리의 일부 파일을 제외한 디렉토리의 모든 파일을 복사하고 싶습니다. ‘cp’명령에 –exclude 옵션이 없다는 것을 알았습니다. 어떻게 이것을 달성 할 수 있습니까?
답변
rsync는 빠르고 쉽습니다.
rsync -av --progress sourcefolder /destinationfolder --exclude thefoldertoexclude
--exclude
여러 번 사용할 수 있습니다 .
rsync -av --progress sourcefolder /destinationfolder --exclude thefoldertoexclude --exclude anotherfoldertoexclude
dir thefoldertoexclude
after --exclude
옵션은 sourcefolder
, 즉 sourcefolder/thefoldertoexclude
.
또한 -n
드라이 런을 추가 하여 실제 작업을 수행하기 전에 복사 할 내용을 확인할 수 있으며 모든 것이 정상이면 -n
명령 줄에서 제거하십시오 .
답변
모든 파일 형식 파일 (cp, mv, rm, tar, rsync, scp 등)이 특정 파일 이름 패턴을 제외해야한다면 엄청난 노력의 중복이 발생할 것입니다. 대신, 그러한 일은 글 로빙의 일부로 수행 할 수 있습니다 .
세게 때리다
man 1 bash
, / extglob .
예:
$ shopt -s extglob 에코 이미지 / * images / 004.bmp images / 033.jpg images / 1276338351183.jpg images / 2252.png $ echo images /! (*. jpg) images / 004.bmp images / 2252.png
그래서 당신은 안에 패턴을 넣고 !()
일치를 무효로합니다. 이 패턴은 Vanwaril이 다른 답변에서 보여주는 것처럼 개별 경로 열거부터 시작 !(filename1|path2|etc3)
하여 별과 문자 클래스가있는 정규 표현식과 같은 것들에 이르기까지 임의로 복잡 할 수 있습니다 . 자세한 내용은 맨 페이지를 참조하십시오.
zsh
man 1 zshexpn
, / 파일 이름 생성 .
setopt KSH_GLOB
bash 같은 패턴을 사용하고 사용할 수 있습니다 . 또는,
EXTENDED_GLOB 설정 % 에코 이미지 / * images / 004.bmp images / 033.jpg images / 1276338351183.jpg images / 2252.png 에코 이미지 % / * ~ * .jpg images / 004.bmp images / 2252.png
따라서 x~y
pattern과 일치 x
하지만 pattern 은 제외합니다 y
. 다시 한 번 자세한 내용은 맨 페이지를 참조하십시오.
새로운 물고기 !
? cp (문자열 일치 -v '* .excluded.names'-srcdir / *) destdir
보너스 프로 팁
을 입력 cp *
하고 누르십시오 CtrlX*. 무슨 일이 일어나는지보십시오. 해롭지는 않아 약속 해
답변
rsync
할 수있을 때 사용하는 이유 :
find . -type f -not -iname '*/not-from-here/*' -exec cp '{}' '/dest/{}' ';'
이것은 목표 디렉토리 구조가 소스와 동일하다고 가정합니다.
답변
cp -r `ls -A | grep -v "c"` $HOME/
답변
내가 찾은 가장 쉬운 방법은 괄호 안에 파일 이름을 추가하여 파일과 폴더를 제외한 모든 파일을 복사 할 수 있습니다.
shopt -s extglob
cp -r !(Filename1 | FoldernameX | Filename2) Dest/
답변
mvds의 의견을 확장 하면 이것이 나를 위해 작동합니다.
cd dotfiles
tar -c --exclude .git --exclude README . | tar -x -C ~/dotfiles2
답변
소스 디렉토리와 관련이 있습니다.
이렇게하면 디렉토리 source/.git
가 복사되지 않습니다.
rsync -r --exclude '.git' source target
