Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 big_smile).

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 tongue

vraiment merci pour ton coup de main


14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne