일부 포럼 소프트웨어를 업데이트하고 CLI를 사용하여 학습 가능성으로 업그레이드 프로세스를 테스트하고 싶습니다.
한 폴더의 내용을 다른 폴더로 병합하고 파일을 바꾸는 방법은 무엇입니까?
답변1
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~
답변2
cp -r name_of_the_folder/* name_of_the_destination_folder를 사용할 수 있습니다. 여기서 별표(*)는 모든 파일을 나타내고 -r은 재귀 복사를 나타냅니다.
콘텐츠를 덮어쓸지 묻는 -i 옵션을 사용할 수도 있습니다.