-bオプションで "cp"コマンドを使用できますが、バックアップファイルがすでに存在する場合は失敗しますか?

-bオプションで "cp"コマンドを使用できますが、バックアップファイルがすでに存在する場合は失敗しますか?

cp -bファイルをターゲットにコピーするために使用したいです。ターゲットパスがすでに存在する場合は、ターゲットパスのバックアップファイルを作成することもできます。しかし、もしバックアップファイルcpすでに存在し、エラーのために失敗したいです。

私はそれを-n破壊を避けるために使用できることを知っています。ターゲットファイルを削除しましたが、破棄を拒否したいと思います。サポート文書。

これを行う方法はありますか?私はcpLinuxでGNUを使用していますが、利用可能なPOSIXオプションがない場合は、Linux関連の回答を喜んで受け入れます。

答え1

GNUを使用してバックアップファイルが破損するのを防ぐために、cp番号付きのバックアップを使用できます。

cp --backup=t  source destination

これにより、バックアップを上書きせずに追加のバックアップが作成されます。

はい

たとえば、2つのファイルを含むディレクトリを考えてみましょう。

$ 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 は
     番号バックアップを実行します。

既存の
     番号付きバックアップが存在する場合、番号はゼロで、そうでなければ単純

簡単です。
     単純バックアップは絶対にしないでください。

特別な場合には、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~

関連情報