동기화

동기화

이 질문은 예를 들어 설명하는 것이 가장 적합하다고 생각합니다.

/home
   test1.txt
   test2.txt
   /home/my-folder
      test3.txt
      test4.txt
  1. test1.txt, test2.txt그리고 my-folder그 안에 있는 폴더 /home.
  2. test3.txt그리고 text4.txt내부 /home/my-folder.

폴더의 모든 내용을 복사하고 싶지만 /home그 안에 있는 2개의 파일을 제외하고 싶습니다( test3.txttest4.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
$

관련 정보