Pages : 1
#1 Le 13/10/2009, à 20:42
- omnimax
cp en alias avec zsh problème
bjr,
j'ai crée cette fonction dans mon .zshrc mais je ne comprends pas pourquoi elle ne fonctionne pas avec des répertoires?
mkp() {mkdir "$2" && cp -R "$1" /"$2" && nautilus "$2"}
qui est en fait la réalisation de ceci
mkdir /emplacement/nouveaurépertoire && cp -R /emplacement/fichiers /nouveaurépertoire && nautilus /emplacement/nouveaurépertoire
ce qui est bizarre c'est que cela marche parfaitement pour des fichiers
ex je fais
mkp nouveaurépertoire fichieràcopier et cela fonctionne
mais si je fais
mkp nouveaurépertoire dossiersàcopier , il me dit impossible de créer dossiersàcopier le dossier existe
hors je comprends pas ma commande équivaut à
cp -R /media/disk/* ~/documents/nouveaudossier
merci pour vos aides
Dernière modification par greg2007 (Le 13/10/2009, à 20:54)
14.04 unity et Linux Mint KDE 13 zsh-meilleur shell script fire
Hors ligne
#2 Le 14/10/2009, à 10:17
- geoges
Re : cp en alias avec zsh problème
Salut,
j'ai pas complètement compris ce que tu voulais faire mais, j'ai l'impression que tu as inversé les paramètres de ta fonction.
Tu veux bien ?
mkp nouveaurépertoire dossieràcopier
mkp() {mkdir nouveaurépertoire && cp -R nouveaurépertoire /dossieràcopier && nautilus dossieràcopier}
tu creer un nouveau dossier et tu le copie ? c'est pas l'inverse que tu veux ?
Cordialement
GeoGes
Dernière modification par geoges (Le 14/10/2009, à 10:17)
Happiness is only real when shared.
Archlinux user
Ubuntu server administrator
Hors ligne
#3 Le 14/10/2009, à 20:34
- omnimax
Re : cp en alias avec zsh problème
non je ne pense pas :
mkp() {mkdir "$2" && cp -R "$1" /"$2" && nautilus "$2"}
d'autant que comme je l'ai dit cette fonction marche parfaitement pour des fichiers
donc si je fais par ex:
mkp /media/disk/fichier /home/$User/nouveaurépertoire
ok cela fonctionne
par contre
mkp /media/disk/* /home/$User/nouveaurépertoire
ne marche pas si disk contient des sous-répertoires
mais
mkp /media/disk/ /home/$User/nouveaurépertoire
marche même avec des sous-répertoires dans disk? étrange non?
14.04 unity et Linux Mint KDE 13 zsh-meilleur shell script fire
Hors ligne
#4 Le 15/10/2009, à 18:38
- omnimax
Re : cp en alias avec zsh problème
Up
14.04 unity et Linux Mint KDE 13 zsh-meilleur shell script fire
Hors ligne
#5 Le 16/10/2009, à 14:16
- Saito
Re : cp en alias avec zsh problème
Normal :
mkp /media/disk/* /home/$User/nouveaurépertoire
se développe en
mkp /media/disk/dossier1 /media/disk/dossier2 /media/disk/dossier3 /media/disk/fichier1 /home/$User/nouveaurépertoire
du coup, ta fonction exécute
mkdir /media/disk/dossier2 && cp -R /media/disk/dossier1 //media/disk/dossier2 && nautilus /media/disk/dossier2
or ton $2 existe déjà dans ce cas donc le reste n'est pas exécuté (grâce au &&).
Vu que t'utilises zsh, je te conseille de modifier ta fonction comme ceci :
mkp() {mkdir "$*[-1]" && cp -R "$*[1,-2]" "$*[-1]" && nautilus "$*[-1]"}
J'ai pas testé (au boulot sans accès à mon serveur) mais ça te permet de gérer tout les cas.
$*[-1] te retourne le dernier argument et $*[1,-2] la liste du premier à l'avant-dernier (normalement ).
Dernière modification par Saito (Le 18/10/2009, à 11:28)
Aku-Soku-Zan_Shinsengumi
Hors ligne
#6 Le 17/10/2009, à 10:30
- omnimax
Re : cp en alias avec zsh problème
Merci Saito, j'ai compris la subtilité mais :
Vu que t'utilises zsh, je te conseille de modifier ta fonction comme ceci :
Code:mkp() {mkdir "$*[-1]" && cp -R "$*[2,-1]" "$*[-1]" && nautilus "$*[-1]"}
J'ai pas testé (au boulot sans accès à mon serveur) mais ça te permet de gérer tout les cas.
$*[-1] te retourne le dernier argument et $*[1,-1] la liste du premier à l'avant-dernier (normalement big_smile).
tu parles dans ta commande de retourner le dernier argument $*[1,-1] mais dans ton bout de code tu mets :
$*[2,-1]
j'ai essayé avec les deux alternatives mais cela ne fonctionne pas...je cherche aussi sur la piste que tu as donné.
14.04 unity et Linux Mint KDE 13 zsh-meilleur shell script fire
Hors ligne
#7 Le 18/10/2009, à 11:27
- Saito
Re : cp en alias avec zsh problème
Au temps pour moi, je me suis un peu embrouillé. Après tests "$*[1,-2]" devrait fonctionner (du premier à l'avant-dernier) :
a=(1 2 3 4 5);echo "$a[1,-2]"
1 2 3 4
Aku-Soku-Zan_Shinsengumi
Hors ligne
#8 Le 18/10/2009, à 11:43
- omnimax
Re : cp en alias avec zsh problème
mkp() {mkdir "$*[-1]" && cp -R "$*[1,-2]" "$*[-1]" && nautilus "$*[-1]"}
je viens de tester cela ne fonctionne pas non plus, pourtant ton raisonnement est correct, ton
a=(1 2 3 4 5);echo "$a[1,-2]"
est juste.
mkp me retourne
Aucun fichier ou dossier de ce type, on dirait qu'il copie encore style cp /1 /2 /3 /4 /5(emplacement créée)
bizarre, il doit y avoir quelque chose qu'on n'a pas saisi
14.04 unity et Linux Mint KDE 13 zsh-meilleur shell script fire
Hors ligne
#9 Le 18/10/2009, à 12:05
- Saito
Re : cp en alias avec zsh problème
Bon, ça se voit que j'ai pas touché à mon shell depuis un moment...
Le problème est que "$*" ne découpe pas par mots donc mon
cp -R "$*[1,-2]" "$*[-1]"
se développe en
cp -R "dossier1 dossier2" "dossier3"
et bien évidemment, tu n'as pas de dossier qui s'appelle "dossier1 dossier2" mais bien deux dossiers distincts
donc finalement :
mkp() {mkdir "$*[-1]" && cp -R "$@[1,-2]" "$*[-1]" && nautilus "$*[-1]"}
devrait être ok cette fois (ouf).
Pour comprendre :
set -- test truc; print -l "$*"; print -l "$@"
et en utilisant un paramètre zsh, on pourrait garder $* et le faire splitter le contenu avec les règles classiques du shell
cp -R "${=*[1,-2]}" "$*[-1]"
mais pas trés intéressant si tes dossiers contiennent des espaces :
set -- test\ truc lol; print -l "${=*}"; print -l "$@"
Dernière modification par Saito (Le 18/10/2009, à 12:13)
Aku-Soku-Zan_Shinsengumi
Hors ligne
#10 Le 20/10/2009, à 18:24
- omnimax
Re : cp en alias avec zsh problème
merci saito, je suis un peu un gros impoli de ne pas t'avoir répondu plus tôt d'autant que tu m'a très bien expliqué ta démarche.
A priori ta soluce marche nickel mais je t'avoue que j'ai pas encore eu le temps de la tester dans ces derniers retranchements
vraiment merci pour ton coup de main
14.04 unity et Linux Mint KDE 13 zsh-meilleur shell script fire
Hors ligne
Pages : 1