DIRECTORYB에 존재하지 않는 DIRECTORY의 모든 파일을 복사하는 간단한 스크립트를 만들고 있습니다. cp 명령을 사용하여 이 작업을 수행합니다.
cp -u DIRECTORYA/* DIRECTORYB
또한 내가 원하는 것은 복사된 파일 목록을 관리자에게 이메일로 보내는 것입니다.
따라서 이상적으로는 위 명령을 실행하기 전에 복사할 파일을 가져와서 나중에 이메일을 작성할 때 사용할 수 있도록 변수에 저장하고 싶습니다.
누구든지 올바른 방향으로 나를 가리킬 수 있습니까? grep을 사용해 보았지만 cp 명령으로는 이 작업을 수행할 수 없다고 생각합니까?
답변1
cp
조치를 취하지 않으면 GNU가 무엇을 할지 알고 싶다면 GNU가 아무 소용이 없을 것 같습니다. 수정된 파일을 기록하려면 다음 -v
옵션을 사용할 수 있습니다.
cp -puv DIRECTORYA/* DIRECTORYB >copy.log
cp
당신은 그것을 사용할 수 있습니다동기화, 훨씬 더 강력하고 저가형 임베디드 시스템을 제외한 거의 모든 곳에 설치할 수 있습니다(기본적으로 존재하지 않더라도 설치가 쉽습니다).
rsync -aunv DIRECTORYA/* DIRECTORYB >what-would-be-done.txt
또는
rsync -auv DIRECTORYA/* DIRECTORYB >copy.log
답변2
~에 따르면매뉴얼 페이지,
-u
,--update
복사한 경우에만원천파일은최신대상 파일보다 또는 대상 파일이잃어버린
이는 두 가지 테스트를 결합한 기능으로, 그 중 하나는 스크립트로 간단하게 구현 가능합니다(잃어버린) 및 약간의 작업이 필요한 것(최신). comm
, diff
및 를 사용하여 필요한 내용을 보고하는 스크립트를 만들 수 있습니다 test
.
표준 cp
유틸리티 중 어느 것도 건식 복사 작업 기능을 제공하지 않습니다. 제안된 대로 rsync
일반 유틸리티를 사용하여 이를 수행하는 방법은 다음과 같습니다. 물론, rsync
단순히 복사하는 것보다 더 많은 기준을 바탕으로 복사하는 데 자주 사용됩니다.최신또는잃어버린(파일 크기와 타임스탬프도 사용됩니다) 하지만 그냥 하는 것으로 축소할 수 있습니다 cp -u
.
비표준 유틸리티의 경우, copy
제가 1980년대 후반에 작성한 유틸리티가 있습니다(물론 오늘날에도 여전히 사용되고 있습니다). make
내가 추가한 첫 번째 옵션이 이었기 때문에 아마도 해당 유틸리티에서 영감을 얻었을 것입니다 -n
.
주어진 예에서는 다음과 같이 사용됩니다.
$ copy -nvU DIRECTORYA/* DIRECTORYB
** copy DIRECTORYA/foo to DIRECTORYB/foo
** 1 file would be copied, 616 bytes
추가 자료:
-
-n
파일의 실제 생성 또는 수정을 비활성화하고 (상세 정도에 따라) 해당 파일의 효과를 표시합니다.copy
주문이 있을 겁니다.
-u
파일은 크기나 수정 날짜가 다른 경우에만 복사되고, 링크 텍스트가 다른 경우에만 링크됩니다.
-U
대상보다 최신 파일이거나 대상에 존재하지 않는 파일만 복사됩니다. 다음의 변경 로그 항목1988년 8월:
1988-08-16 * src/copy/src/copy.c: "-d" 및 "-n" 옵션이 추가되었습니다.
답변3
을 실행하려면 cp foo*bar whatever
을 실행하세요 echo foo*bar whatever
.
답변4
대신 rsync를 사용해 보세요. Rsync는 로컬 복사본에서 매우 잘 실행되며, 15가지의 셀 수 없이 많은 옵션을 찾아보면 확실히 원하는 작업을 수행할 수 있습니다.
rsync -avun DIRECTORYA/ DIRECTORYB
앞으로 이루어질 모든 일을 네게 보이리라.
rsync -avu DIRECTORYA/ DIRECTORYB
그렇게 할 것이다.