cp 명령으로 복사 할 파일을 테스트하는 방법은 무엇입니까?


11

DIRECTORYB에 존재하지 않는 DIRECTORYA의 모든 파일을 복사하는 간단한 스크립트를 작성 중입니다. cp 명령을 사용 하여이 작업을 수행하고 있습니다.

cp -u DIRECTORYA/* DIRECTORYB

내가하고 싶은 것은 복사 된 파일을 나열 할 이메일을 관리자에게 보내는 것입니다.

이상적으로 위의 명령을 실행하기 전에 전자 메일 메시지를 작성할 때 나중에 사용할 수 있도록 파일을 복사하여 변수에 저장하고 싶습니다.

아무도 올바른 방향으로 나를 가리킬 수 있습니까? grep 사용을 살펴 보았지만 이것이 cp 명령으로 수행 할 수 있다고 생각하지 않습니까?


1
어쩌면 나는 당신의 질문을 오해하고 있지만 -v파일 이름을 복사 할 때 플래그 를 사용 하여 파일 이름을 인쇄 할 수 없습니까? 파일 또는 변수로 직접 리디렉션하고이를 사용하여 메시지를 작성하십시오.
ThibautRenaux

또한이 cp명령에는 --attributes-only파일 데이터를 복사하지 않고 디렉토리 및 파일 구조 만 허용하는 옵션이 있습니다 .
Costas

스크립팅에 익숙하지 않아서 죄송합니다. -v 플래그를 사용하면 파일 대신 변수에 어떻게 출력 할 수 있습니까?
James

1
bash를 사용한다고 가정하면 variable=$(cp -v ...)cp의 stdout을 캡처합니다. 17:32의 gnu.org/software/bash/manual/html_node/Command-Substitution.htm
Gowtham

답변:


4

나는 cp당신이 행동하지 않고 그 일이 무엇인지보고 싶다면 GNU 가 당신을 도울 것이 없다고 생각 합니다. 수정 된 파일을 기록하려면 다음 -v옵션을 사용할 수 있습니다 .

cp -puv DIRECTORYA/* DIRECTORYB >copy.log

대신에 rsynccp 를 사용할 수 있습니다. rsync 을 사용 하면 로우 엔드 임베디드 시스템을 제외하고 거의 모든 곳에 설치되며 기본적으로 존재하지 않는 곳에 쉽게 설치할 수 있습니다.

rsync -aun DIRECTORYA/* DIRECTORYB >what-would-be-done.txt

또는

rsync -auv DIRECTORYA/* DIRECTORYB >copy.log

2

사용자가 실행하고 싶었다면 cp foo*bar whatever, 다음 실행 echo foo*bar whatever대신.


그러나 OP는 달리기를 원하고 cp -ucp에 대한 건식 옵션과 같은 옵션을 찾고 있습니다.
Arkadiusz Drabczyk

2

에 따르면 매뉴얼 페이지 ,

-u, SOURCE 파일이 대상 파일보다 최신 이거나 대상 파일이 누락 된 경우 에만 복사--update

이것은 두 가지 테스트를 결합하는 기능입니다. 하나는 스크립트에서 구현하기에 사소한 것 ( 누락 )과 약간의 작업이 필요합니다 ( 더 새로운 것 ). 다음을 사용하여 필요한 것을보고하는 스크립트를 만들 수 comm, difftest.

표준 cp유틸리티 중 어느 것도 복사 작업을 드라 이런 할 수있는 기능을 제공 하지 않습니다 . 제안 된대로 rsync일반적으로 사용 가능한 유틸리티를 사용하여이 작업을 수행하는 방법입니다. 물론 rsync일반적으로 새롭 거나 누락 된 것보다 더 많은 기준에 따라 복사하는 데 사용됩니다 (파일 크기 및 타임 스탬프도 사용됨). 그러나 그냥하는 것으로 줄일 수 있습니다 cp -u.

비표준 유틸리티의 경우 copy1980 년대 후반에 내가 작성한 유틸리티가 있습니다 (물론 여전히 사용합니다). 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 월의 changelog 항목 :

    1988-08-16    
            * src / copy / src / copy.c : "-d"및 "-n"옵션이 추가되었습니다.
    

0

diff 명령을 사용할 수 있습니다. 매일 일부 백업 파일을 복사하는 작업이 있습니다. 언젠가 모든 파일이 복사되었는지 확인 해야하는 구문은 다음과 같습니다.

diff /file1/ /file2/

물론 복사하려는 경우 다음을 사용하십시오.

cp -u /file1/* /file2

0

대신 rsync를 사용하십시오. Rsync는 로컬 복사본에서 완벽하게 작동하며 15 개의 gazillion 옵션을 사용하면 원하는 작업을 수행 할 수 있습니다.

rsync -avun DIRECTORYA/ DIRECTORYB

수행 될 모든 것을 보여줄 것입니다.

rsync -avu DIRECTORYA/ DIRECTORYB

할 것입니다.

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