#1 Le 26/08/2013, à 11:24
- omnimax
zshrc fonction spéciale cp et mkdir
Bonjour,
j'aimerai coder cette fonction dans mon zshrc, car lorsque je copie des fichiers vers un dossier, il faut d'abord créer le dossier et ensuite copier les fichers dedans
mkdir dossier && cp /home/$USER/*.JPG /home/$USER/dossier/
Hors moi j'aimerai faire ceci dans le dossier /home/$USER/
mkp *.JPG dossier
mkp()
{
mkdir "$PWD"/$2" && cp $1 "$PWD"/"$2"
}
Mais malheureusement ma fonction ne marche pas...un petit coup de main serait bien sympa
14.04 unity et Linux Mint KDE 13 zsh-meilleur shell script fire
Hors ligne
#2 Le 26/08/2013, à 11:32
- omnimax
Re : zshrc fonction spéciale cp et mkdir
boulette ! j'avais mis un espace en trop
maitenant cela marche
mkp()
{
mkdir "$PWD"/$2" && cp $1 "$PWD"/"$2"
}
14.04 unity et Linux Mint KDE 13 zsh-meilleur shell script fire
Hors ligne
#3 Le 26/08/2013, à 11:45
- Watael
Re : zshrc fonction spéciale cp et mkdir
salut,
mets toutes les variables entre guillemets
mkp()
{
mkdir "$PWD/$2" && cp "$1" "$PWD/$2"
}
un jour tu voudras peut-être faire
mkp "mon fichier" "ma destination"
alors, ça n'échouera pas
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#4 Le 26/08/2013, à 12:48
- pingouinux
Re : zshrc fonction spéciale cp et mkdir
Bonjour,
Quelques remarques qui s'ajoutent à celles de Watael :
mkp *.JPG dossier
S'il y a plusieurs fichiers *.JPG, $1 contiendra le premier fichier, et $2 le deuxième. Si tu veux pouvoir traiter plusieurs fichiers, tu as intérêt à inverser l'ordre des arguments de mkp.
Si le répertoire existe déjà, mkdir s'arrêtera en erreur, et le cp ne s'exécutera pas. Utilise plutôt mkdir -p
mkp()
{
mon_dir="$1"; shift
mkdir -p "$PWD"/"$mon_dir" && cp "$@" "$PWD"/"$mon_dir"
}
à appeler ainsi
mkp dossier *.JPG
Hors ligne
#5 Le 27/08/2013, à 06:50
- omnimax
Re : zshrc fonction spéciale cp et mkdir
Watael,
Merci "$"
pingouinux,
Je ne comprends pas ton utilisation de shift ?
"shift permet de décaler les paramètresLa valeur du 1er paramètre ($1) est remplacée par la valeur du 2nd paramètre ($2), celle du 2nd paramètre ($2) par celle du 3ème paramètre ($3), etc... "
en gros cela équivaut-il à dire $1 devient mon_dir et la valeur de mon_dir se décale en reprenant la valeur $1.
Ai-je bien compris?
Dernière modification par omnimax (Le 27/08/2013, à 06:56)
14.04 unity et Linux Mint KDE 13 zsh-meilleur shell script fire
Hors ligne
#6 Le 27/08/2013, à 07:11
- pingouinux
Re : zshrc fonction spéciale cp et mkdir
"shift permet de décaler les paramètresLa valeur du 1er paramètre ($1) est remplacée par la valeur du 2nd paramètre ($2), celle du 2nd paramètre ($2) par celle du 3ème paramètre ($3), etc... "
Oui.
en gros cela équivaut-il à dire $1 devient mon_dir et la valeur de mon_dir se décale en reprenant la valeur $1.
Non.
mon_dir prend la valeur $1, puis après le shift, $1 contient le nom de la première image.
"$@" contient alors le nom de toutes les images.
Hors ligne
#7 Le 27/08/2013, à 09:15
- omnimax
Re : zshrc fonction spéciale cp et mkdir
je comprends pas trop...:( pourquoi ne pas faire plus simplement :
mkp()
{
mkdir -p "$1" && cp "$2" "$1"
}
en étant par exemple dans /home/$USER/images/
mkp /home/$USER/nouveaurepertoire *.jpg
Dernière modification par omnimax (Le 27/08/2013, à 09:16)
14.04 unity et Linux Mint KDE 13 zsh-meilleur shell script fire
Hors ligne
#8 Le 27/08/2013, à 09:29
- pingouinux
Re : zshrc fonction spéciale cp et mkdir
Si tu as plus d'un fichier *.jpg, par exemple photo1.jpg et photo2.jpg, $1 contiendra bien /home/$USER/nouveaurepertoire, mais $2 ne contiendra que photo1.jpg. L'autre image ne sera pas copiée.
Hors ligne
#9 Le 27/08/2013, à 09:32
- omnimax
Re : zshrc fonction spéciale cp et mkdir
alors pourquoi ne peux on pas mettre ?
mkp()
{
mkdir -p "$1" && cp "$@" "$1"
}
Dernière modification par omnimax (Le 27/08/2013, à 09:32)
14.04 unity et Linux Mint KDE 13 zsh-meilleur shell script fire
Hors ligne
#10 Le 27/08/2013, à 09:39
- pingouinux
Re : zshrc fonction spéciale cp et mkdir
Avec mon exemple en #8, on obtiendrait ceci :
mkdir -p "/home/$USER/nouveaurepertoire" && cp "/home/$USER/nouveaurepertoire" "photo1.jpg" "photo2.jpg" "/home/$USER/nouveaurepertoire"
Le shift permet d'éliminer le répertoire qui apparaît en tête des paramètres.
Hors ligne
#11 Le 27/08/2013, à 09:46
- omnimax
Re : zshrc fonction spéciale cp et mkdir
merci pingouinux, avec tes explications cela a fait tilt !
mon_dir > devient le répertoire ($1)
$1 redevient par exemple fichier1.jpg avec shift
donc $@ égal tous les fichiers.jpg (fichier1.jpg, fichier2.jpg, ...)
maintenant je comprends le décalage du shift
14.04 unity et Linux Mint KDE 13 zsh-meilleur shell script fire
Hors ligne