cp -b
파일을 대상에 복사하는 데 사용하고 싶습니다 . 대상 경로가 이미 존재하는 경우 대상 경로의 백업 파일을 생성할 수도 있습니다. 하지만 만약에백업 파일cp
이미 존재하며 오류로 인해 실패 하길 원합니다 .
나는 그것을 -n
파괴를 피하기 위해 사용할 수 있다는 것을 안다.표적파일을 삭제했지만 파기를 거부하고 싶습니다.지원문서.
이를 수행할 수 있는 방법이 있습니까? 저는 cp
Linux에서 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~