23

Often when I'm editing some system file first I create a backup copy. For example:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

Is there any simple 'shortcut' such as:

sudo cp /etc/ssh/sshd_config %s.bak

?


A workaround that I found is to use sed in this way:

sudo sed '' /etc/ssh/sshd_config -i.bak
0

2 Answers 2

40

You could use brace expansion like this:

cp example_file{,.bak}
5
  • 1
    Oh, so nice! +1... Oct 6, 2017 at 11:57
  • 1
    You beat me, very elegant :-)
    – sudodus
    Oct 6, 2017 at 14:02
  • 3
    to be safer cp -n example_file{,.bak}
    – shouldsee
    Mar 7, 2019 at 20:50
  • let (GNU) cp handle the backup: cp -v -f -b -T file{,} (also numbered backups are available)
    – hakre
    Mar 10, 2021 at 11:18
  • 1
    to be even more safer cp -nv example_file{,.bak};
    – Victor S.
    May 14, 2021 at 19:09
5

1. What you asked for

You can create a small shellscript file bupper:

I have a directory ~/bin, where I keep such help files.

#!/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

Make it executable,

chmod ugo+x bupper

When in ~/bin, it will be in PATH and you can run it like any executable program anywhere (where you have write permissions).

Example:

$ 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'

2. Alternative - let the editor do the job automatically

Some editors have an option to create a backup copy of the file before you save a new version. This backup has often a tilde as the last character (tilde is the extension, but there is no dot before it).

Gedit, the standard editor in Ubuntu is one of them.

enter image description here

After setting gedit to save such a backup copy:

gedit hello.txt

And check afterwards

$ ls hello.txt*
hello.txt  hello.txt~  hello.txt.bak

Now hello.txt~ has been added to hello.txt and the backup created by bupper.

This works with nano too, with the option -B

nano -B hello.txt

so you can do it with a command line editor for 'sudo' tasks :-)

3
  • Thank you for this answer. This was my first idea, but I must have script as this on every machine which I'm using.
    – pa4080
    Oct 6, 2017 at 11:58
  • 1
    @pa4080, 75andyd's solution is elegant and portable (when you have learned it by heart). But I edited my answer to add a workaround - to let the editor do the job automatically. You can make Gedit create a backup file 'hello.txt' -> 'hello.txt~' and there are other editors that have the same option. This alternative is very convenient.
    – sudodus
    Oct 6, 2017 at 14:37
  • nano -B only seems to have one backup version ie notes.txt~
    – Cymatical
    Sep 18, 2021 at 17:01

Not the answer you're looking for? Browse other questions tagged .