Lo scorso luglio ho scritto di due ottimi usi del comando cp:fare un backup di un file e sincronizzare una copia secondaria di una cartella.
Avendo scoperto queste fantastiche utilità, trovo che siano più dettagliate del necessario, quindi ho creato scorciatoie per esse nel mio script di avvio della shell Bash. Ho pensato di condividere queste scorciatoie nel caso in cui fossero utili ad altri o potessero offrire ispirazione agli utenti di Bash che non hanno ancora adottato alias o funzioni della shell.
Aggiornamento di una seconda copia di una cartella – alias Bash
Il modello generale per aggiornare una seconda copia di una cartella con cp
è:
cp -r -u -v SOURCE-FOLDER DESTINATION-DIRECTORY
dove il -r
sta per "discendere ricorsivamente attraverso la cartella visitando tutti i file", -u
sta per "aggiorna la destinazione" e -v
sta per "modalità dettagliata", SOURCE-FOLDER
è il nome della cartella che contiene le informazioni più aggiornate e DESTINATION-DIRECTORY
è la directory contenente la copia della SOURCE-FOLDER
che deve essere sincronizzato.
Ricordo facilmente il -r
opzione perché lo uso spesso quando copio le cartelle in giro. Probabilmente posso, con qualche sforzo in più, ricordare -v
e, con ancora più sforzo, -u
(è "aggiorna" o "sincronizza" o...).
Oppure posso semplicemente usare la capacità di alias in Bash per convertire il cp
comando e opzioni per qualcosa di più memorabile, come questo:
alias sync='cp -r -u -v'
Se lo salvo nel mio .bash_aliases
file nella mia home directory e quindi avviare una nuova sessione di terminale, posso usare l'alias, ad esempio:
sync Pictures /media/me/4388-E5FE
per sincronizzare la mia cartella Immagini nella mia home directory con la versione della stessa nella mia unità USB.
Non sono sicuro di avere già una sync
alias definito? Puoi elencare tutti gli alias attualmente definiti digitando la parola alias
al prompt dei comandi nella finestra del terminale.
Ti piace così tanto che vuoi solo iniziare a usarlo subito? Apri una finestra di terminale e digita:
echo "alias sync='cp -r -u -v'" >> ~/.bash_aliases
Quindi apri una nuova finestra di terminale e digita la parola alias
al prompt dei comandi. Dovresti vedere qualcosa del genere:
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:~$
Lì puoi vedere la sync
alias definito.
Effettuare backup con versione – Funzione Bash
Il modello generale per eseguire un backup di un file con cp
è:
cp --force --backup=numbered WORKING-FILE BACKED-UP-FILE
dove il -- force
sta per "fai la copia indipendentemente da cosa", the -- backup=numbered
sta per "usa un numero per indicare la generazione del backup", WORKING-FILE
è il file corrente che desideriamo conservare e BACKED-UP-FILE
è lo stesso nome del WORKING-FILE
e verranno aggiunte le informazioni sulla generazione.
Oltre a ricordare le opzioni per il cp
comando, dobbiamo anche ricordarci di ripetere il WORKING-FILE
nominare una seconda volta. Ma perché ripeterci quando una funzione Bash può occuparsi di quel sovraccarico per noi, in questo modo:
Ancora una volta, puoi salvarlo nel tuo .bash_aliases
file nella tua home directory.
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
}
Ho chiamato questa funzione "backup" perché non ho altri comandi chiamati "backup" sul mio sistema, ma puoi scegliere il nome che preferisci.
Il primo if
l'istruzione controlla che sia fornito un solo argomento alla funzione, altrimenti stampa l'utilizzo corretto con echo
comando.
Il elif
l'istruzione controlla per assicurarsi che l'argomento fornito sia un file e, in tal caso, utilizza (in modo dettagliato) il secondo echo
per stampare il cp
comando da usare e poi lo esegue.
Se il singolo argomento non è un file, il terzo echo
stampa un messaggio di errore in tal senso.
Nella mia home directory, se eseguo il backup
comando così definito nel file checkCounts.sql
, vedo quel backup
crea un file chiamato checkCounts.sql.~1~
. Se lo eseguo ancora una volta, vedo un nuovo file checkCounts.sql.~2~
.
Successo! Come previsto, posso continuare a modificare checkCounts.sql
, ma se ne faccio uno snapshot ogni tanto con il backup, posso tornare allo snapshot più recente in caso di problemi.
Ad un certo punto, è meglio iniziare a utilizzare git
per il controllo della versione, ma backup
come definito sopra è un ottimo strumento economico quando devi creare istantanee ma non sei pronto per git
.
Conclusione
Nel mio ultimo articolo, ti ho promesso che le attività ripetitive spesso possono essere facilmente semplificate attraverso l'uso di script di shell, funzioni di shell e alias di shell.
Qui ho mostrato esempi concreti dell'uso di alias e funzioni di shell per ottimizzare la funzionalità di sincronizzazione e backup del cp
comando. Se desideri saperne di più, dai un'occhiata ai due articoli sopra citati:Come salvare le sequenze di tasti sulla riga di comando con alias e script della shell:un'introduzione al metodo shift e alle funzioni personalizzate, scritta dai miei colleghi Greg e Seth , rispettivamente.