Loni v červenci jsem psal o dvou skvělých použitích příkazu cp:vytvoření zálohy souboru a synchronizace sekundární kopie složky.
Když jsem objevil tyto skvělé nástroje, zjistil jsem, že jsou podrobnější, než je nutné, a tak jsem k nim vytvořil zástupce ve svém spouštěcím skriptu Bash shell. Napadlo mě, že bych se o tyto zkratky podělil pro případ, že by byly užitečné pro ostatní nebo by mohly nabídnout inspiraci uživatelům Bash, kteří si tak úplně nezvykli na aliasy nebo funkce shellu.
Aktualizace druhé kopie složky – alias Bash
Obecný vzor pro aktualizaci druhé kopie složky pomocí cp
je:
cp -r -u -v SOURCE-FOLDER DESTINATION-DIRECTORY
kde -r
znamená „rekurzivně sestupovat přes složku navštěvující všechny soubory“, -u
znamená „aktualizovat cíl“ a -v
znamená „podrobný režim“, SOURCE-FOLDER
je název složky, která obsahuje nejaktuálnější informace, a DESTINATION-DIRECTORY
je adresář obsahující kopii SOURCE-FOLDER
který musí být synchronizován.
Snadno si pamatuji -r
možnost, protože ji často používám při kopírování složek. Pravděpodobně si s větším úsilím vzpomenu na -v
a s ještě větším úsilím -u
(je to „aktualizace“ nebo „synchronizace“ nebo…).
Nebo mohu použít alias v Bash k převodu cp
příkaz a možnosti na něco lépe zapamatovatelného, jako je toto:
alias sync='cp -r -u -v'
Pokud to uložím do svého .bash_aliases
soubor v mém domovském adresáři a poté spustit novou relaci terminálu, mohu použít alias, například:
sync Pictures /media/me/4388-E5FE
pro synchronizaci složky Obrázky v mém domovském adresáři s verzí stejného adresáře na mém USB disku.
Nejste si jisti, zda již máte sync
alias definovaný? Všechny aktuálně definované aliasy můžete vypsat zadáním slova alias
na příkazovém řádku v okně terminálu.
Tak moc se vám to líbí a chcete to hned začít používat? Otevřete okno terminálu a zadejte:
echo "alias sync='cp -r -u -v'" >> ~/.bash_aliases
Poté spusťte nové okno terminálu a zadejte slovo alias
na příkazovém řádku. Měli byste vidět něco takového:
me@mymachine~$ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias gvm='sdk'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
alias sync='cp -r -u -v'
me@mymachine:~$
Zde můžete vidět sync
alias definovaný.
Vytváření verzovaných záloh – funkce Bash
Obecný vzor pro vytvoření zálohy souboru pomocí cp
je:
cp --force --backup=numbered WORKING-FILE BACKED-UP-FILE
kde -- force
znamená „vytvořit kopii bez ohledu na to“, -- backup=numbered
znamená “použít číslo k označení generování zálohy”, WORKING-FILE
je aktuální soubor, který chceme zachovat, a BACKED-UP-FILE
je stejný název jako WORKING-FILE
a budou mít připojeny informace o generování.
Kromě zapamatování možností cp
musíme také pamatovat na opakování WORKING-FILE
jméno podruhé. Ale proč se opakovat, když se o tu režii může postarat funkce Bash, jako je tato:
Opět to můžete uložit do .bash_aliases
soubor ve vašem domovském adresáři.
function backup {
if [ $# -ne 1 ]; then
echo "Usage: $0 filename"
elif [ -f $1 ] ; then
echo "cp --force --backup=numbered $1 $1"
cp --force --backup=numbered $1 $1
else
echo "$0: $1 is not a file"
fi
}
Tuto funkci jsem nazval „backup“, protože v mém systému nemám žádné další příkazy zvané „backup“, ale můžete si vybrat jakýkoli název, který vám vyhovuje.
První if
příkaz zkontroluje, zda je funkci poskytnut pouze jeden argument, jinak vytiskne správné použití pomocí echo
příkaz.
elif
příkaz zkontroluje, zda je zadaný argument soubor, a pokud ano, použije (výslovně) druhý echo
vytisknout cp
příkaz, který má být použit, a poté jej provede.
Pokud jediný argument není soubor, třetí echo
vytiskne v tomto smyslu chybovou zprávu.
V mém domovském adresáři, pokud spustím backup
příkaz takto definovaný v souboru checkCounts.sql
, vidím tu backup
vytvoří soubor s názvem checkCounts.sql.~1~
. Pokud jej spustím ještě jednou, zobrazí se nový soubor checkCounts.sql.~2~
.
Úspěch! Podle plánu mohu pokračovat v úpravách checkCounts.sql
, ale pokud si to občas udělám se zálohou, můžu se vrátit k nejnovějšímu snímku, pokud bych se dostal do potíží.
V určitém okamžiku je lepší začít používat git
pro správu verzí, ale backup
jak je definováno výše, je pěkný levný nástroj, když potřebujete vytvořit snímky, ale nejste připraveni na git
.
Závěr
Ve svém minulém článku jsem vám slíbil, že opakující se úkoly lze často snadno zjednodušit pomocí skriptů shellu, funkcí shellu a aliasů shellu.
Zde jsem ukázal konkrétní příklady použití aliasů shellu a funkcí shellu pro zefektivnění synchronizace a zálohování cp
příkaz. Pokud byste se o tom chtěli dozvědět více, podívejte se na dva výše citované články:Jak ušetřit úhozy na příkazovém řádku pomocí aliasů a skriptování Shell:Úvod do metody shift a vlastních funkcí, napsaný mými kolegy Gregem a Sethem , respektive.