#1 Le 31/01/2010, à 23:06
- nesthib
[bash] annuler un déplacement/renommage de fichier
vous venez de déplacer/renommer un fichier avec la commande mv et vous souhaitez annuler ce mouvement ? (ne fonctionne pas en cas d'écrasement du fichier cible)
si la commande vient juste d'être lancée :
mv !:2 !:1
si d'autres commandes (sauf mv) ont été lancées entre temps
mv !:mv2 !mv:1
Ceci utilise les opérateurs de substitution d'historique de bash.
Limitation : impossible de scripter les substitution d'historique
une solution pour passer par une fonction :
function unmv () {
command=$(history | tac | grep -m1 "^[^a-Z]*mv ")
arg1=$(sed 's/^[^a-Z]*mv "*\([^"]*[^\"]\)"* "*\([^"]*\)"*/\1/' <<<$command)
arg2=$(sed 's/^[^a-Z]*mv "*\([^"]*[^\"]\)"* "*\([^"]*\)"*/\2/' <<<$command)
if [ -f "$arg2" ]; then
mv -i "$arg2" "$arg1"
else
[ "${arg1}" = "${arg1%/*}" ] && arg="./" || arg="${arg1%/*}"
mv -i "${arg2%/}/${arg1##*/}" "$arg"
fi
}
(quelques bugs, notamment avec les fichiers comportant " ou \ dans le nom, si quelqu'un a une meilleure solution)
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#2 Le 31/01/2010, à 23:16
- sputnick
Re : [bash] annuler un déplacement/renommage de fichier
Il existe aussi cela que je trouve plus mnemonic :
mv foo bar
mv !$ !^ # equivalent à mv bar foo
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#3 Le 01/02/2010, à 00:15
- nesthib
Re : [bash] annuler un déplacement/renommage de fichier
bien vu sputnick
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne