-b 옵션과 함께 "cp" 명령을 사용할 수 있지만 백업 파일이 이미 있으면 실패합니까?

-b 옵션과 함께 "cp" 명령을 사용할 수 있지만 백업 파일이 이미 있으면 실패합니까?

cp -b파일을 대상에 복사하는 데 사용하고 싶습니다 . 대상 경로가 이미 존재하는 경우 대상 경로의 백업 파일을 생성할 수도 있습니다. 하지만 만약에백업 파일cp이미 존재하며 오류로 인해 실패 하길 원합니다 .

나는 그것을 -n파괴를 피하기 위해 사용할 수 있다는 것을 안다.표적파일을 삭제했지만 파기를 거부하고 싶습니다.지원문서.

이를 수행할 수 있는 방법이 있습니까? 저는 cpLinux에서 GNU를 사용하고 있으며 사용 가능한 POSIX 옵션이 없으면 Linux 관련 답변을 기꺼이 받아들입니다.

답변1

GNU를 사용하여 백업 파일이 손상되는 것을 방지하려면 cp번호가 매겨진 백업을 사용할 수 있습니다.

cp --backup=t  source destination

이렇게 하면 백업을 덮어쓰지 않고 추가 백업이 생성됩니다.

예를 들어, 두 개의 파일이 포함된 디렉터리를 고려해 보겠습니다.

$ ls
file1  file2

이제 file1을 file2에 복사해 보겠습니다.

$ cp --backup=t file1 file2
$ ls
file1  file2  file2.~1~

보시다시피 백업이 완료되었습니다.

다시 복사해 봅시다:

$ cp --backup=t file1 file2
$ ls
file1  file2  file2.~1~  file2.~2~

또 다른 백업이 이루어졌습니다.

문서

man cp"설명" 섹션이 끝나기 전에 --backup가능한 다양한 옵션이 나열됩니다.

--suffix 또는 SIMPLE_BACKUP_SUFFIX를 사용하지 않는 한 백업 접미사는 ​​"~"입니다. 버전 제어 방법은 --backup 옵션이나 VERSION_Control 환경 변수를 통해 선택할 수 있습니다. 값은 다음과 같습니다.

none, off
     백업을 만들지 않습니다(--backup이 지정된 경우에도).

number, t는
     번호 백업을 수행합니다.

기존,
     번호가 지정된 백업이 존재하는 경우 번호는 0이고, 그렇지 않으면 단순

간단합니다.
     단순 백업은 절대 하지 마세요.

특별한 경우로, cp는 force 및 backup 옵션이 주어지고 SOURCE 및 DEST가 기존 일반 파일과 동일한 이름을 가질 때 SOURCE를 백업합니다.

답변2

항상 파일을 복사하는 데 사용한다면 원하는 대로 쉘 함수를 만들 수 있습니다 ~/.bashrc.

cpb () 
{ 
    if [ -r "${2}/${1}~" ] ; then 
        echo "backup of '$1' exists in '$2'"
    else 
        cp -b "$1" "$2"
    fi
}

다음과 같이 사용하세요.

$ mkdir dir
$ cpb x dir
$ cpb x dir
$ cpb x dir
backup of 'x' exists in 'dir'
$ ls -l dir
insgesamt 0
-rw-r--r-- 1 ott ott 0 Jul 16 01:09 x
-rw-r--r-- 1 ott ott 0 Jul 16 01:08 x~

관련 정보