有没有办法创建文件的备份副本,而无需两次输入其名称?

pa4*_*080 16 command-line bash cp

通常,当我首先编辑某个系统文件时,我会创建一个备份副本。例如:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
Run Code Online (Sandbox Code Playgroud)

是否有任何简单的“捷径”,例如:

sudo cp /etc/ssh/sshd_config %s.bak
Run Code Online (Sandbox Code Playgroud)

?


我发现的一种解决方法是以sed这种方式使用:

sudo sed '' /etc/ssh/sshd_config -i.bak
Run Code Online (Sandbox Code Playgroud)

rob*_*cks 30

您可以像这样使用大括号扩展:

cp example_file{,.bak}
Run Code Online (Sandbox Code Playgroud)

  • 为了更安全`cp -n example_file{,.bak}` (3认同)

sud*_*dus 5

1. 你要求什么

您可以创建一个小的 shellscript 文件bupper

我有一个目录~/bin,我在其中保存此类帮助文件。

#!/bin/bash

if [ $# -eq 1 ]
then
 cp -pvi "$1" "${1}.bak"
else
 echo "Info:  $0 copies to a backup file"
 echo "Usage: $0 <file to be backed up with .bak extension>"
fi
Run Code Online (Sandbox Code Playgroud)

使其可执行,

chmod ugo+x bupper
Run Code Online (Sandbox Code Playgroud)

当 in 时~/bin,它将位于 PATH 中,您可以像任何可执行程序一样在任何地方(您有写入权限的地方)运行它。

例子:

$ bupper hello.txt 
'hello.txt' -> 'hello.txt.bak'
$ bupper hello.txt 
cp: overwrite 'hello.txt.bak'? n
$ bupper hello.txt 
cp: overwrite 'hello.txt.bak'? y
'hello.txt' -> 'hello.txt.bak'
Run Code Online (Sandbox Code Playgroud)

2.替代方案——让编辑器自动完成工作

某些编辑器可以选择在保存新版本之前创建文件的备份副本。此备份通常以波形符作为最后一个字符(波形符是扩展名,但前面没有点)。

Ubuntu 中的标准编辑器 Gedit 就是其中之一。

在此输入图像描述

gedit设置保存这样的备份副本后:

gedit hello.txt
Run Code Online (Sandbox Code Playgroud)

然后检查一下

$ ls hello.txt*
hello.txt  hello.txt~  hello.txt.bak
Run Code Online (Sandbox Code Playgroud)

现在hello.txt~已添加到hello.txt并创建了备份bupper

nano也适用于选项-B

nano -B hello.txt
Run Code Online (Sandbox Code Playgroud)

所以你可以使用命令行编辑器来完成“sudo”任务:-)