CLI를 사용하여 폴더 병합 및 파일 교체


9

포럼 소프트웨어를 업데이트하고 CLI를 학습 가능성으로 사용하여 업그레이드 프로세스를 테스트하고 싶습니다.

폴더의 내용을 다른 폴더로 병합하고 파일을 바꾸려면 어떻게합니까?

답변:


10

rsync이 작업을 수행 하는 데 사용할 수 있습니다 .

$ rsync -abviuzP src/ dest/
  • -a보관 모드; -rlptgoD와 같음 (아니오 -H, -A, -X)
  • -i 기본 형식보다 더 많은 정보를 표시하는 항목 별 형식을 켭니다.
  • -b이전 파일에 ~를 추가하여 두 폴더 모두에 존재하는 rsync 백업 파일을 만듭니다. --suffix .suf를 사용하여이 접미사를 제어 할 수 있습니다.
  • -u rsync 전송이 src보다 dest의 최신 파일을 건너 뜁니다.
  • -z 압축을 켭니다. 느린 링크를 통해 쉽게 압축 가능한 파일을 전송할 때 유용합니다
  • -P --partial 및 --progress를 켭니다.
    • --partial 전송이 중단 된 경우 rsync가 부분적으로 전송 된 파일을 유지하도록합니다.
    • --progress 큰 파일을 전송할 때 유용한 각 전송의 진행률 표시 줄을 보여줍니다.

이 스위치들 중 몇 개를 버렸지 만 이것은 시작하기위한 것입니다. 아마 다음과 같은 것을 사용할 것입니다 :

$ rsync -abuP src/ dest/

확인되면 다음 명령을 실행하여 백업 파일을 제거 할 수 있습니다.

$ find dest/ -name "*.~" -delete

다음 샘플 데이터가 있다고 가정 해 봅시다.

원본 데이터

다음 명령을 사용하여 가짜 데이터를 제조합니다.

$ seq 10 | xargs -I{} -- mkdir dest/dir{}
$ for i in $(seq 5); do echo "$i" > dest/dir$i/file$i;done

가짜 데이터는 다음과 같습니다.

$ tree -DsifvF --noreport dest/
dest
[       4096 Aug 29 22:21]  dest/dir1/
[          2 Aug 29 22:21]  dest/dir1/file1
[       4096 Aug 29 22:21]  dest/dir2/
[          2 Aug 29 22:21]  dest/dir2/file2
[       4096 Aug 29 22:21]  dest/dir3/
[          2 Aug 29 22:21]  dest/dir3/file3
[       4096 Aug 29 22:21]  dest/dir4/
[          2 Aug 29 22:21]  dest/dir4/file4
[       4096 Aug 29 22:21]  dest/dir5/
[          2 Aug 29 22:21]  dest/dir5/file5

새로운 데이터

이제 원본 데이터 ( dest/*-> src/)를 복제하고 새로운 파일 몇 개를 믹스에 추가합니다. 이것은 "새로운 릴리스"를 시뮬레이트합니다.

$ cp -pr dest/* src/
$ mkdir src/dir11
$ for i in 1 3 5 11; do echo "$i$i" > src/dir$i/file$i;done

가짜 데이터는 다음과 같습니다.

$ tree -DsifvF --noreport src/
src
[       4096 Aug 29 22:21]  src/dir1/
[          3 Aug 29 23:00]  src/dir1/file1
[       4096 Aug 29 22:21]  src/dir2/
[          2 Aug 29 22:21]  src/dir2/file2
[       4096 Aug 29 22:21]  src/dir3/
[          3 Aug 29 23:00]  src/dir3/file3
[       4096 Aug 29 22:21]  src/dir4/
[          2 Aug 29 22:21]  src/dir4/file4
[       4096 Aug 29 22:21]  src/dir5/
[          3 Aug 29 23:00]  src/dir5/file5
[       4096 Aug 29 23:00]  src/dir11/
[          5 Aug 29 23:00]  src/dir11/file11

src /를 dest /로 병합

이것은 우리가 새 소프트웨어 트리를 설정하고 src/기존 디렉토리 인에 통합하려고 한다는 것을 모방합니다 dest/.

$ rsync -abuP src/ dest/
sending incremental file list
dir1/file1
           3 100%    0.00kB/s    0:00:00 (xfer#1, to-check=5/13)
dir11/
dir11/file11
           5 100%    4.88kB/s    0:00:00 (xfer#2, to-check=4/13)
dir3/file3
           3 100%    2.93kB/s    0:00:00 (xfer#3, to-check=2/13)
dir5/file5
           3 100%    2.93kB/s    0:00:00 (xfer#4, to-check=0/13)

sent 416 bytes  received 97 bytes  1026.00 bytes/sec
total size is 18  speedup is 0.04

보시다시피, file1, file3, file5 및 새로 추가 된 dir11 + file11 파일이 업데이트 된 것을 볼 수 있습니다.

그리고 확인에서 다음 파일이 rsync에서 기존 파일을 발견했을 때 생성되었음을 알 수 있습니다 dest/.

$ find dest/ | grep "~"
dest/dir3/file3~
dest/dir1/file1~
dest/dir5/file5~

위의 요점을 명확히하려면 다음과 같이하십시오. 일단 괜찮아 보이면이 명령을 실행하여 백업 파일을 제거 할 수 있습니다.> $ find dest / -name "start dot ~"-delete 이것은 나에게는 효과가 없었습니다. dest / -name "start dot star ~"찾기-삭제했습니다. 그것이 오타인지 또는 내 끝이 올바르게 설정되어 있지 않은지 확실하지 않습니다!

2

별표 (*)는 모든 파일을 나타내고 -r은 재귀 복사를 나타냅니다. cp -r name_of_the_folder / * name_of_the_destination_folder를 사용할 수 있습니다.

-i 옵션을 사용하여 내용을 덮어 쓸 것인지 묻습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.