이 질문은 예를 들어 설명하는 것이 가장 적합하다고 생각합니다.
/home
test1.txt
test2.txt
/home/my-folder
test3.txt
test4.txt
test1.txt
,test2.txt
그리고my-folder
그 안에 있는 폴더/home
.test3.txt
그리고text4.txt
내부/home/my-folder
.
폴더의 모든 내용을 복사하고 싶지만 /home
그 안에 있는 2개의 파일을 제외하고 싶습니다( test3.txt
및 test4.txt
) my-folder
.
이 작업을 수행하려면 어떻게 해야 합니까 cp
?
rsync
방금 시도했지만 때로는 rsync
서버에 설치되지 않았고 소프트웨어를 설치할 권한이 없기 때문에 이것이 가능하다는 것을 알고 있습니다 .
답변1
find(1)
다음을 사용하여 이 작업을 수행할 수 있습니다 cpio(1)
.
find /home -path './my-folder/test[34].txt' -prune -o \( -type f -print \) | \
cpio -pdamv /some/other/dir
답변2
cp
복사하려는 파일을 나열하지 않고는 혼자서 이 작업을 수행 할 수 없습니다 . 부분 복사본을 만드는 것은 cp
의 기능을 벗어납니다 .
Rsync는 작업을 위한 확실한 도구이며 매우 널리 사용됩니다.
POSIX 도구만 있는 경우 다음을 사용할 수 있습니다.공원. 파일 경로를 빈 문자열로 다시 작성하여 파일을 생략할 수 있습니다.
cd /home && pax -rw -pe -s'~^\./my-folder/test[34]\.txt$~~' . /path/to/destination
최소한의 Linux 서버만 누락된 경우 pax
기존의 해당 서버를 사용할 수 cpio
있는지 확인하세요 tar
. 바라보다lcd047의 답변예를 들어 cpio
. GNU를 사용하면 tar
다음을 수행할 수 있습니다.
mkdir /path/to/destination
tar -cf - -C /home --exclude='./my-folder/test[34].txt' . |
tar -xf - -C /path/to/destination
답변3
동기화
나는 이와 같은 것이 필요했고 포럼에서 조사를 했습니다. Gilles가 언급했듯이 제가 찾은 가장 좋은 방법은 RSYNC를 사용하는 것입니다. 내가 좋아하는 두 가지:
- .gitignore와 같은 외부 파일을 입력으로 사용하여 복사하지 않으려는 파일과 폴더를 제외할 수 있습니다.
- 이는 아래 예제 4에서 언급할 것처럼 (기존 파일이나 폴더를 복사하지 않고) 동일한 소스 디렉터리의 동일한 백업(복사본)을 반복해야 할 때 효율적입니다.
예 1: 특정 파일 제외:
rsync -a --exclude 'file.txt' originalDirectory/ backupDirectory/
예 2: 특정 폴더(예: dirName이라는 폴더) 제외:
rsync -a --exclude 'dirName' originalDirectory/ backupDirectory/
예 3: 여러 파일 및 폴더 제외:
rsync -a --exclude={'file1.txt', 'file2.json','dir1/*','dir2'} originalDirectory/ backupDirectory/
예 4: 여러 파일 및 폴더 제외:
rsync -a --exclude-from='exclude.txt' originalDirectory/ backupDirectory/
제외.txt다음 콘텐츠가 포함되어 있습니다:
file1.txt
file2.json
file3.pdf
dir1
dir2
*.png
답변4
어때요?
cp !(my-folder) /foo
예:
$ find . -type f
./my-folder/test4.txt
./my-folder/test3.txt
./test2.txt
./test1.txt
$ echo cp !(my-folder) /foo
cp test1.txt test2.txt /foo
$