Programing

리눅스 어떻게 복사하지만 덮어 쓰지 않습니까?

lottogame 2020. 3. 4. 08:05
반응형

리눅스 어떻게 복사하지만 덮어 쓰지 않습니까?


내가 원하는 cp심지어 그들이 복사 된 파일보다 오래된 디렉토리하지만 기존 파일을 덮어 싶지 않아요. 그리고 Crontab Bash 스크립트의 일부이므로 완전히 비 대화식으로 만들고 싶습니다. 어떤 아이디어?


매뉴얼 페이지 에서 가져온 것 :

-n, --no-clobber
              do not overwrite an existing file (overrides a previous -i option)

예:

cp -n myoldfile.txt mycopiedfile.txt

사용을 고려하십시오 rsync.

rsync -a -v --ignore-existing src dst

의견 rsync -a -v src dst따르면 기존 파일을 업데이트하므로 정확하지 않습니다.


cp -n

당신이 원하는 것입니다. 매뉴얼 페이지를 참조하십시오.


'n'옵션이없는 사용자 (예 : RedHat의 cp -u경우)는 소스가 기존 파일보다 최신 인 경우 (또는 기존 파일이없는 경우)에만 파일을 쓰는 데 사용할 수 있습니다 .

[편집] 주석에서 언급했듯이 이것은 오래된 파일을 덮어 쓰므로 OP가 원하는 것이 아닙니다. ceving의 답변을 사용하십시오.


이것은 RedHat에서 작동합니다.

false | cp -i source destination 2>/dev/null

업데이트덮어 쓰기를하지 않는 것은 뭔가 다르다.


알파인 리눅스 : 고산 지역 : 대답 다음은 단일 파일의 경우입니다 cp -n(그리고 작동하지 않는 false | cp -i ...솔루션은 I가 발견 내 경우에는 작업 때문에 너무) :

if [ ! -f env.js ]; then cp env.example.js env.js; fi 

위 예제에서 env.js파일이 존재하지 않으면에 복사 env.example.js합니다 env.js.


일부 cp 버전에는 --no-clobber 옵션 이 없습니다 . 이 경우 :

  echo n | cp -vipr src/* dst

참고 URL : https://stackoverflow.com/questions/9392735/linux-how-to-copy-but-not-overwrite



반응형