cp 명령이 복사할 파일을 어떻게 테스트할 수 있나요?

cp 명령이 복사할 파일을 어떻게 테스트할 수 있나요?

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

추가 자료:

  • copy - 파일/디렉토리 복사 유틸리티

    -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

그렇게 할 것이다.

관련 정보