Contenu | Rechercher | Menus

Annonce

Le forum a une nouvelle maison !
Le forum a été migré sur un nouvel hébergement. Si jamais vous trouvez le moindre problème, n'hésitez pas à nous en faire part !
Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".

#1 Le 31/01/2010, à 23:06

nesthib
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

[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)

Hors ligne

#2 Le 31/01/2010, à 23:16

sputnick
Membre

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


bashfr.org(random);
<arciks1994> dou tu connai qel age j'ai ?

Hors ligne