your programing

리눅스 복사는 하되 덮어쓰지 않는 방법은?

lovepro 2023. 5. 22. 22:16
반응형

리눅스 복사는 하되 덮어쓰지 않는 방법은?

하고싶어cp기존 파일이 복사된 파일보다 오래된 경우에도 디렉터리를 덮어쓰지 않습니다.그리고 저는 이것이 크론탭 배시 스크립트의 일부가 될 것이기 때문에 완전히 대화형이 아닌 것으로 하고 싶습니다.아이디어 있어요?

man 페이지에서 가져온 것:

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

예:

cp -n myoldfile.txt mycopiedfile.txt

사용을 고려해 보십시오.

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

댓글에 따라rsync -a -v src dst기존 파일을 업데이트하므로 올바르지 않습니다.

cp -n

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

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

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

업데이트하는 것과 덮어쓰지 않는 것은 다릅니다.

(RedHat의 나처럼) 'n' 옵션이 없는 사용자는 사용할 수 있습니다.cp -u원본이 기존 파일보다 최신이거나 기존 파일이 없는 경우에만 파일을 씁니다.

[edit] 코멘트에서 언급했듯이, 이것은 오래된 파일을 덮어쓸 것이기 때문에 OP가 정확히 원했던 것은 아닙니다.세빙의 대답을 사용하세요.

Alpine Linux: 아래 답변은 단일 파일의 경우에만 해당됩니다. alpine에서cp -n작동하지 않는(그리고)false | cp -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

이것은 나에게 효과가 있습니다 yes n | cp -isrcdest.

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

반응형