Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
735 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  nom de fichier avec espaces en argument

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

nom de fichier avec espaces en argument

n°715336
wistiti68
Posté le 07-08-2005 à 12:44:21  profilanswer
 

Bonjour.
J'essaye d'écrire un script, mais il bloque pour l'instant sur les fichier contenant des espace.
Un exemple, j'aimerais executer la commande suivante:
cd $A avec A=mon répertoire numérau un
Et bien ça ne marche pas! Le scripte me renvois line X... too many arguments
En temps normale dans une console on taperait cd mon\ répertoire\ numérau\ un
J'ai pensé alors utiliser sed pour insérer un "\" avant chaque espaces.
Ainsi, A contient textuellement mon\ répertoire\ numérau\ un
Mais rien n'y fait, j'ai toujours ce même message d'erreur.
J'ajoute que je ne veux surtout pas purger mes documents de leurs espace en les remplacant par des "_" ou autre chose.
 
Voilà.Merci pour toutes vos popositions.

mood
Publicité
Posté le 07-08-2005 à 12:44:21  profilanswer
 

n°715338
Profil sup​primé
Posté le 07-08-2005 à 12:53:11  answer
 

peut etre en faisant A="mon répertoire numéro un" et en suite cd $A

n°715340
jlighty
Posté le 07-08-2005 à 12:58:44  profilanswer
 

Oui c'est ça :
A="mon repertoire" puis cd "$A"

n°715384
wistiti68
Posté le 07-08-2005 à 15:40:58  profilanswer
 

D'accord merci beaucoup.
En fait mon A vient d'une boucle for.
C'est juste syntaxiquement for A in "*" ?
Je vais essayer de suite.

n°715387
jlighty
Posté le 07-08-2005 à 15:51:48  profilanswer
 

affiche voir ton script

n°715396
wistiti68
Posté le 07-08-2005 à 16:23:46  profilanswer
 

Pour l'instant c'est juste un script pour tester la fonction, il ne sert pas à grand chose:
 
cd /home/titi/c
for i in *
do
cd $i
mkdir ok
cd /home/titi/c
done
 
je créé un répertoire "ok" pour vérifier qu'il a bien réussi à rentré dans le sous-répertoire du répertoire parent c

n°715398
jlighty
Posté le 07-08-2005 à 16:26:48  profilanswer
 

J'aurais plutôt fait :

Code :
  1. cd /home/titi/c
  2. for i in `find ./ -type d -maxdepth 1`; do
  3. cd "$i"
  4. mkdir ok;
  5. cd /home/titi/c
  6. done


Message édité par jlighty le 07-08-2005 à 16:32:17
n°715399
Pillow
'cos the trees won't talk
Posté le 07-08-2005 à 16:26:59  profilanswer
 

cd /home/titi/c
for i in *
do
    if [ -d "$i" ]
    then
       cd "$i"
       mkdir ok
       cd /home/titi/c
    fi
done

n°715401
Pillow
'cos the trees won't talk
Posté le 07-08-2005 à 16:29:49  profilanswer
 

jlighty a écrit :

J'aurais plutôt fait :

Code :
  1. cd /home/titi/c
  2. for i in `find ./ -type d`
  3. cd $i
  4. mkdir ok;
  5. cd /home/titi/c
  6. done


Il n'a pas dit qu'il voulait appliquer le script sur tous les sous répertoires. Il faudrait utiliser -maxdepth 1 avec find (et utiliser des guillemets pour les espaces :o )


Message édité par Pillow le 07-08-2005 à 16:30:08
n°715402
jlighty
Posté le 07-08-2005 à 16:33:06  profilanswer
 

c'est édité :jap:

mood
Publicité
Posté le 07-08-2005 à 16:33:06  profilanswer
 

n°715413
wistiti68
Posté le 07-08-2005 à 17:17:46  profilanswer
 

Merci beaucoup pillow, ton script fonctionne!
Jllghty, dsl mais le tien n'arrive pas à rentrer dans les répertoires à espace.
Bon bin j'y retourne (jusqu'au prochain problème ;) )

n°715414
jlighty
Posté le 07-08-2005 à 17:19:26  profilanswer
 

tu as essayé la version corrigée ? (cd "$i" )

n°715416
wistiti68
Posté le 07-08-2005 à 17:45:16  profilanswer
 

oui

n°715424
jlighty
Posté le 07-08-2005 à 18:45:22  profilanswer
 

en faite il faut "protéger" la sortie de find

Code :
  1. for i in "`find ./ -maxdepth 1 -type d `"; do

n°715450
wistiti68
Posté le 07-08-2005 à 20:20:04  profilanswer
 

Non dsl, cette fois il arrive même pas à rentrer dans les répertoire sans espaces.
Mais ne te sens pas obliger de te casser la tête, j'ai une methode qui marche donc c'est ok.

n°715456
jlighty
Posté le 07-08-2005 à 20:53:29  profilanswer
 

Non je ne me casse pas la tête :) mais j'essaye simplement d'intégrer un find dans une boucle car je risque d'utiliser l'algorithme bientôt.
Bon je viens de trouver une autre solution que la boucle for

Code :
  1. find ./ -maxdepth 1 -type d | tail +2 | while read l


avec "$l" contenant le nom du répertoire.

n°715723
wistiti68
Posté le 08-08-2005 à 22:35:39  profilanswer
 

Dsl, je débute en script. Je veux bien tester ta commande mais je n'ai pas compris comment l'intégrer dans le script. Et la variable I n'intervient pas?

n°715727
jlighty
Posté le 08-08-2005 à 22:43:15  profilanswer
 

En fait cette ligne remplace celle contenant "for..."
sachant qu'il ne faut pas oublier de remplacer "while read l" par "while read i" pour que ce soit en concordance avec l'ancien script.
 
donc : "find ./ -maxdepth 1 -type d" -> on récupère tous les dossiers contenu à la racine de notre répertoire
tail +2 : en fait dans la liste des répertoires retournés, il figure en première place le répertoire "./" qui est le répertoire courant. Si tu ne veux pas créer un repertoire ok dans le répertoire suivant alors cette commande te conviendra sinon supprime la.
while read l : on récupère les noms des dossiers un par un


Message édité par jlighty le 08-08-2005 à 22:43:41
n°715809
wistiti68
Posté le 09-08-2005 à 10:54:17  profilanswer
 

OUI cette fois ça marche c'est tout bon!
Une des raisons que je n'avais pas compris c'est que j'avais lu "while read 1 ("un" ) au lieu de "I".(ils s'affichent identiquement sur sur mon écran)
En fait ta solution m'arrange même plus puisque maintenant, dans mon vrai script je suis en train de galérer sur la récursivité. Et avec find, il n'y a plus de problème!
Merci beaucoup du coup de main.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  nom de fichier avec espaces en argument

 

Sujets relatifs
Icone type fichier sous Gnome 2.10rediriger la sortie d'un man dans un fichier ps
Amsn et le transfert de fichier[Installation Debian] Fichier « release »
Serveur de fichier avec sambaRestaurer un fichier Windows depuis Linux
incrémenter le nom d'un fichierFichier jpeg énorme avec imagemagick (convert)
Serveur de fichier sous MDK10.1, configuration des droits.PERL + bash: gestion des espaces vides dans les noms de fichier
Plus de sujets relatifs à : nom de fichier avec espaces en argument


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR