cp -b
ファイルをターゲットにコピーするために使用したいです。ターゲットパスがすでに存在する場合は、ターゲットパスのバックアップファイルを作成することもできます。しかし、もしバックアップファイルcp
すでに存在し、エラーのために失敗したいです。
私はそれを-n
破壊を避けるために使用できることを知っています。ターゲットファイルを削除しましたが、破棄を拒否したいと思います。サポート文書。
これを行う方法はありますか?私はcp
Linuxで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~