#1 Le 16/09/2021, à 15:03
- Terminus78
[Résolu] Création de dossier selon nom fichier
Bonjour à tous,
J'aurais besoin de créer un script qui puisse me créer automatiquement des dossiers selon le contenu de mon répertoire.
Pour contexte, j'ai aujourd'hui un script qui me télécharge automatiquement du contenu sur un serveur http, cependant le contenu arrive sous cette forme :
Dossier >
- 123-blablabla.pptx
- 123-tructruc.txt
- 856-barbeapapa.csv
- 123-blablabla.csv
- 777-tructruc.txt
- 777-barbeapapa.csv
Etc ...
Ce que je souhaiterais, c'est qu'une fois mon script déroulé, je me retrouve avec ceci :
Dossier >
- 123
- 123-blablabla.pptx
- 123-tructruc.txt
- 123-blablabla.csv
- 856
- 856-barbeapapa.csv
- 777
- 777-tructruc.txt
- 777-barbeapapa.csv
Aujourd'hui j'ai seulement réussi a créer un script qui me créé les dossiers à la volée, problème il me fait cela pour chaque fichier trouvé, donc je me retrouve avec autant de dossiers que de fichiers ...
Merci pour votre aide
Dernière modification par Terminus78 (Le 22/09/2021, à 10:21)
Hors ligne
#2 Le 16/09/2021, à 16:23
- Watael
Re : [Résolu] Création de dossier selon nom fichier
salut,
il faut séparer la partie nom_de_répertoire des noms des fichiers.
réfère-toi au man bash, à la section Remplacements de paramètres, tu trouveras la substitution qui ne retiendra que la partie jusqu'à l'expression pertinente (dans ton cas jusqu'au premier tiret).
montre-nous ce que tu fais, on t'aidera mieux.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 16/09/2021, à 16:24
- MicP
Re : [Résolu] Création de dossier selon nom fichier
Bonjour
… Dossier > - 123-blablabla.pptx …
Est-ce que chacun des noms de fichiers est réellement constitué d'un tiret suivit d'un caractère espace suivit de trois chiffres et du reste du nom de fichier ?
… - 123 - 123-blablabla.pptx - 123-tructruc.txt …
Est-ce que tu veux créer des répertoires dont le nom commence par un tiret suivit d'un caractère espace et de trois chiffres ?
Si non, précise ta demande en donnant un ou des retours de commandes utilisables
dans lesquels on pourra voir les vrais noms des fichiers et répertoires
ce qui permettra d'éviter toute confusion.
Dernière modification par MicP (Le 16/09/2021, à 16:25)
Hors ligne
#4 Le 16/09/2021, à 16:54
- Terminus78
Re : [Résolu] Création de dossier selon nom fichier
Merci pour vos retours.
Pour plus de précisions :
Les fichiers que je télécharge se nomme toujours ainsi :
<ID>--<Exclusif(ou General)>-<Titre1>-<Titre2>.extension
Pour info, jusqu'à maintenant l'ID comporte toujours 8 caractères (si ça peut aider ...).
Pour exemple les derniers fichiers que j'ai pu recevoir (j'ai juste modifié les titres) :
LU006553--Exclusif-Titre1-Titre2.pdf
LU187506--Exclusif-Titre1-Titre2.csv
LU187506--Exclusif-Titre1-Titre2.pdf
LU187506--Exclusif-Titre1-Titre2.pptx
LU006553--General-Titre1-Titre2.pptx
IM778925--General-Titre1-Titre2.txt
YU215891--Exclusif-Titre1-Titre2.txt
LU006553--General-Titre1-Titre2.txt
Est-ce que tu veux créer des répertoires dont le nom commence par un tiret suivit d'un caractère espace et de trois chiffres ?
Non, c'était pour présenter la chose de manière plus propre
Et du coup, effectivement je souhaiterais que mes dossiers se nomme comme les IDs.
Hors ligne
#5 Le 16/09/2021, à 17:37
- erresse
Re : [Résolu] Création de dossier selon nom fichier
Bonsoir,
Regarde cette instruction "rsync" qui est très intéressante car elle crée (ou pas selon le besoin) le sous-répertoire indiqué et y copie le fichier (ou le déplace si l'option "--remove-source-files" est utilisée) en une seule opération. Il suffit de l'inclure dans une boucle pour gérer tous les fichiers du répertoire principal.
rsync --remove-source-files "${FICHIER}" "./${FICHIER%-*}/"
Cette commande est très puissante et aussi très "touffue", je ne saurais pas en dire tous les avantages, mais il doit y avoir par ici quelques spécialistes qui pourront le faire, je pense.
Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.
Hors ligne
#6 Le 16/09/2021, à 18:50
- MicP
Re : [Résolu] Création de dossier selon nom fichier
… un script qui puisse me créer automatiquement des dossiers selon le contenu de mon répertoire. …
Contenu de ~/monScript.sh :
#!/bin/bash
repSrc="$1" # Nom du répertoire à traiter et qui est donné en paramètre au script
maRegex='(.*)--(.*)'
for f in "$repSrc"/*; do
[[ $f =~ $maRegex ]]
rep="${BASH_REMATCH[1]}"
fich="${BASH_REMATCH[2]}"
[ -d "$rep" ] || mkdir "$rep"
mv --backup=numbered "$f" "$rep/$fich"
done
=======
Le contenu de mon répertoire ~/repTests/ avant le lancement du script :
michel@debbull:~$ ls -l repTests
total 0
-rw-r--r-- 1 michel michel 0 16 sept. 19:44 IM778925--General-Titre1-Titre2.txt
-rw-r--r-- 1 michel michel 0 16 sept. 19:44 LU006553--Exclusif-Titre1-Titre2.pdf
-rw-r--r-- 1 michel michel 0 16 sept. 19:44 LU006553--General-Titre1-Titre2.pptx
-rw-r--r-- 1 michel michel 0 16 sept. 19:44 LU006553--General-Titre1-Titre2.txt
-rw-r--r-- 1 michel michel 0 16 sept. 19:44 LU187506--Exclusif-Titre1-Titre2.csv
-rw-r--r-- 1 michel michel 0 16 sept. 19:44 LU187506--Exclusif-Titre1-Titre2.pdf
-rw-r--r-- 1 michel michel 0 16 sept. 19:44 LU187506--Exclusif-Titre1-Titre2.pptx
-rw-r--r-- 1 michel michel 0 16 sept. 19:44 YU215891--Exclusif-Titre1-Titre2.txt
michel@debbull:~$
Je lance le script :
michel@debbull:~$ ~/monScript.sh ~/repTests/
michel@debbull:~$
Je visualise le résultat de l'exécution du script :
michel@debbull:~$ ls -lR repTests
repTests:
total 16
drwxr-xr-x 2 michel michel 4096 16 sept. 19:45 IM778925
drwxr-xr-x 2 michel michel 4096 16 sept. 19:45 LU006553
drwxr-xr-x 2 michel michel 4096 16 sept. 19:45 LU187506
drwxr-xr-x 2 michel michel 4096 16 sept. 19:45 YU215891
repTests/IM778925:
total 0
-rw-r--r-- 1 michel michel 0 16 sept. 19:44 General-Titre1-Titre2.txt
repTests/LU006553:
total 0
-rw-r--r-- 1 michel michel 0 16 sept. 19:44 Exclusif-Titre1-Titre2.pdf
-rw-r--r-- 1 michel michel 0 16 sept. 19:44 General-Titre1-Titre2.pptx
-rw-r--r-- 1 michel michel 0 16 sept. 19:44 General-Titre1-Titre2.txt
repTests/LU187506:
total 0
-rw-r--r-- 1 michel michel 0 16 sept. 19:44 Exclusif-Titre1-Titre2.csv
-rw-r--r-- 1 michel michel 0 16 sept. 19:44 Exclusif-Titre1-Titre2.pdf
-rw-r--r-- 1 michel michel 0 16 sept. 19:44 Exclusif-Titre1-Titre2.pptx
repTests/YU215891:
total 0
-rw-r--r-- 1 michel michel 0 16 sept. 19:44 Exclusif-Titre1-Titre2.txt
michel@debbull:~$
Même liste,
mais en la faisant s'afficher par la commande tree :
michel@debbull:~$ tree repTests
repTests
├── IM778925
│ └── General-Titre1-Titre2.txt
├── LU006553
│ ├── Exclusif-Titre1-Titre2.pdf
│ ├── General-Titre1-Titre2.pptx
│ └── General-Titre1-Titre2.txt
├── LU187506
│ ├── Exclusif-Titre1-Titre2.csv
│ ├── Exclusif-Titre1-Titre2.pdf
│ └── Exclusif-Titre1-Titre2.pptx
└── YU215891
└── Exclusif-Titre1-Titre2.txt
4 directories, 8 files
michel@debbull:~$
Dernière modification par MicP (Le 17/09/2021, à 09:19)
Hors ligne
#7 Le 17/09/2021, à 14:39
- Terminus78
Re : [Résolu] Création de dossier selon nom fichier
Merci beaucoup pour vos retours !
@MicP, voici le résultat lorsque je tente de lancer le script :
ad98cas1@dv98cas03:/opt/application/98cas1/G05R00C00/transferthttp $ sh script_tri.sh ~/chemin/
: command not foundtri.sh: line 2:
: command not foundtri.sh: line 4:
'cript_tri.sh: line 6: syntax error near unexpected token `do
'cript_tri.sh: line 6: `for f in "$repSrc"/*; do
Une idée d'où peux provenir le problème ?
Dernière modification par Terminus78 (Le 17/09/2021, à 15:00)
Hors ligne
#8 Le 17/09/2021, à 15:02
- MicP
Re : [Résolu] Création de dossier selon nom fichier
Je ne comprends pas les messages d'erreurs retournés, on dirait qu'ils sont tronqués,
du moins, au niveau du nom du script concerné.
=======
Plutôt que de lancer l'exécution du script par l'interpréteur de commandes sh (qui est différent de l'interpréteur de commandes bash)
il aurait mieux valu rendre le script exécutable et lancer son exécution en l'appelant directement.
=======
Il faudrait que l'on puisse voir le Retour utilisable
des lignes de commandes suivantes :
ls -l /opt/application/98cas1/G05R00C00/transferthttp*/script_tri.sh
cat /opt/application/98cas1/G05R00C00/transferthttp*/script_tri.sh
=======
Et vérifier que la ligne de commande suivante liste bien les fichiers à trier :
ls -l ~/chemin/
Dernière modification par MicP (Le 17/09/2021, à 15:06)
Hors ligne
#9 Le 17/09/2021, à 15:23
- Terminus78
Re : [Résolu] Création de dossier selon nom fichier
Re,
Il faudrait que l'on puisse voir le Retour utilisable
des lignes de commandes suivantes :ls -l /opt/application/98cas1/G05R00C00/transferthttp*/script_tri.sh
2|ad98cas1@dv98cas03:/opt/application/98cas1/G05R00C00/transferthttp $ ls -l /opt/application/98cas1/G05R00C00/transferthttp/Draw*/script_tri.sh
-rwxr-xr-x 1 ad98cas1 gp98cas1 324 Sep 17 15:59 /opt/application/98cas1/G05R00C00/transferthttp/Draw/script_tri.sh
cat /opt/application/98cas1/G05R00C00/transferthttp*/script_tri.sh
ad98cas1@dv98cas03:/opt/application/98cas1/G05R00C00/transferthttp $ cat /opt/application/98cas1/G05R00C00/transferthttp/Draw*/script_tri.sh
#!/bin/bash
repSrc="$1" # Nom du répertoire à traiter et qui est donné en paramètre au script
maRegex='(.*)--(.*)'
for f in "$repSrc"/*; do
[[ $f =~ $maRegex ]]
rep="${BASH_REMATCH[1]}"
fich="${BASH_REMATCH[2]}"
[ -d "$rep" ] || mkdir "$rep"
mv --backup=numbered "$f" "$rep/$fich"
Et vérifier que la ligne de commande suivante liste bien les fichiers à trier :
ls -l ~/chemin/
donead98cas1@dv98cas03:/opt/application/98cas1/G05R00C00/transferthttp $ ls -l ~/chemin/
total 4600
drwxr-xr-x 2 ad98cas1 gp98cas1 4096 Sep 16 16:24 log
drwxr-xr-x 2 ad98cas1 gp98cas1 4096 Sep 16 16:24 tmp
-rw-r--r-- 1 ad98cas1 gp98cas1 4396212 Sep 16 16:25 LU006893--Exclusif-Titre1-Titre2.pptx
-rw-r--r-- 1 ad98cas1 gp98cas1 139491 Sep 16 16:25 LU006893--Exclusif-Titre1-Titre2.pdf
-rw-r--r-- 1 ad98cas1 gp98cas1 124352 Sep 16 16:25 IM711229--General-Titre1-Titre2.docx
-rw-r--r-- 1 ad98cas1 gp98cas1 10603 Sep 16 16:24 unXML_2021-09-16.xml
Voila voila, j'espère avoir apporté les infos nécessaires
Hors ligne
#10 Le 17/09/2021, à 15:35
- Tawal
Re : [Résolu] Création de dossier selon nom fichier
Hello,
@Terminus78 :
Il manque un done à la fin du script.
Une erreur de copier/coller ?
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#11 Le 17/09/2021, à 16:03
- Terminus78
Re : [Résolu] Création de dossier selon nom fichier
Ah oui effectivement, bizarre car pourtant il figure bien dans mon script ...
Mais lorsque je fais un cat, il n'apparait plus !
EDIT :
J'ai réecris à la main, du coup le done apparait bien lors de mon cat.
Cependant j'ai toujours la même erreur que mentionnée plus tôt ...
Dernière modification par Terminus78 (Le 17/09/2021, à 16:08)
Hors ligne
#12 Le 17/09/2021, à 16:17
- geole
Re : [Résolu] Création de dossier selon nom fichier
Bonjour
essaie
cd /opt/application/98cas1/G05R00C00/transferthttp
chmod +x script_tri.sh
./script_tri.sh ~/chemin/
Dernière modification par geole (Le 17/09/2021, à 16:19)
Les grilles de l'installateur https://doc.ubuntu-fr.org/tutoriel/inst … _subiquity
"gedit admin:///etc/fstab" est proscrit, utilisez "pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY xdg-open /etc/fstab" Voir https://doc.ubuntu-fr.org/gedit
Les partitions EXT4 des disques externes => https://forum.ubuntu-fr.org/viewtopic.p … #p22697248
En ligne
#13 Le 17/09/2021, à 16:23
- MicP
Re : [Résolu] Création de dossier selon nom fichier
Le script est bien exécutable,
donc, si la dernière ligne du script contient bien la commande done
tu peux lancer son exécution depuis n'importe quel répertoire
en entrant la ligne de commande suivante :
/opt/application/98cas1/G05R00C00/transferthttp/Draw/script_tri.sh ~/chemin/
=======
Pour qu'il soit plus facilement accessible, tu peux créer dans ton répertoire ~/bin
un lien vers ton script :
[ -d ~/bin ] || mkdir ~/bin && ln -s /opt/application/98cas1/G05R00C00/transferthttp/Draw/script_tri.sh ~/bin/script_tri.sh
Après avoir lancé la ligne de commandes ci-dessus,
si le répertoire ~/bin n'existait pas encore, il faudra que tu te déconnectes
pour ouvrir une session graphique de façon à ce que ton répertoire ~/bin
soit dans les chemins listés dans la variable PATH
ce qui te permettra de lancer ton script depuis n'importe quel répertoire,
sans avoir besoin de spécifier son chemin absolu :
script_tri.sh ~/chemin/
(Bien sûr, j'ai proposé de créer un lien, mais tu peux tout aussi bien remplacer le lien directement par le script.)
Dernière modification par MicP (Le 17/09/2021, à 16:31)
Hors ligne
#14 Le 17/09/2021, à 16:25
- Terminus78
Re : [Résolu] Création de dossier selon nom fichier
Bonjour @Geole,
Voici le résultat après l'avoir rendu exécutable :
1|ad98cas1@dv98cas03:/opt/application/98cas1/G05R00C00/transferthttp/ $ ./script_tri.sh ~/chemin/
ksh: ./script_tri.sh: No such file or directory
Hors ligne
#15 Le 17/09/2021, à 16:36
- geole
Re : [Résolu] Création de dossier selon nom fichier
Je ne suis trompé d'endroit
chmod +x /opt/application/98cas1/G05R00C00/transferthttp/Draw/script_tri.sh
/opt/application/98cas1/G05R00C00/transferthttp/Draw/script_tri.sh ~/chemin/
Dernière modification par geole (Le 17/09/2021, à 16:37)
Les grilles de l'installateur https://doc.ubuntu-fr.org/tutoriel/inst … _subiquity
"gedit admin:///etc/fstab" est proscrit, utilisez "pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY xdg-open /etc/fstab" Voir https://doc.ubuntu-fr.org/gedit
Les partitions EXT4 des disques externes => https://forum.ubuntu-fr.org/viewtopic.p … #p22697248
En ligne
#16 Le 17/09/2021, à 16:38
- MicP
Re : [Résolu] Création de dossier selon nom fichier
…
1|ad98cas1@dv98cas03:/opt/application/98cas1/G05R00C00/transferthttp/ $ ./script_tri.sh ~/chemin/ ksh: ./script_tri.sh: No such file or directory
Ce n'est pas le bon répertoire,
c'est pour ça que l'interpréteur de commande ksh n'a pas trouvé le script.
=======
Pour lancer le script depuis le répertoire dans lequel il est,
il faut lancer successivement les deux lignes de commandes suivantes :
Pour aller dans le répertoire où se trouve le script :
cd /opt/application/98cas1/G05R00C00/transferthttp/Draw
Pour lancer le script :
./script_tri.sh ~/chemin/
=======
Le script était déjà exécutable :
…
… -rwxr-xr-x 1 ad98cas1 gp98cas1 324 Sep 17 15:59 /opt/application/98cas1/G05R00C00/transferthttp/Draw/script_tri.sh
…
Dernière modification par MicP (Le 17/09/2021, à 17:13)
Hors ligne
#17 Le 17/09/2021, à 16:40
- Terminus78
Re : [Résolu] Création de dossier selon nom fichier
Ah oui désolé ...
J'en profite pour vous remercier une fois de plus pour votre aide.
Cependant j'obtiens le même résultat en étant dans le bon répertoire .
Hors ligne
#18 Le 17/09/2021, à 16:59
- MicP
Re : [Résolu] Création de dossier selon nom fichier
…
… ksh: ./script_tri.sh: No such file or directory
…
Je vois que sur ta machine,
c'est le shell ksh qui a cherché à lancer le script.
Mais ce script est prévu pour être interprété et exécuté par le shell bash
=======
Si le shell bash est accessible par /bin/bash sur ton système,
essaye avec les deux lignes de commandes suivantes :
- Pour aller dans le répertoire où se trouve le script :
cd /opt/application/98cas1/G05R00C00/transferthttp/Draw
- Pour lancer le script depuis le répertoire dans lequel il est :
/bin/bash -c ./script_tri.sh ~/chemin/
Dernière modification par MicP (Le 17/09/2021, à 17:16)
Hors ligne
#19 Le 20/09/2021, à 09:10
- Terminus78
Re : [Résolu] Création de dossier selon nom fichier
Désolé me voilà de retour avec mon soucis ^^
Voici le résultat que j'obtiens lors de ma tentative :
./script_tri.sh: /bin/bash^M: bad interpreter: No such file or directory
Hors ligne
#20 Le 20/09/2021, à 09:27
- hotnuma
Re : [Résolu] Création de dossier selon nom fichier
Un problème de saut de ligne peut être ?
https://stackoverflow.com/questions/142 … -directory
Voir avec dos2unix pour convertir les sauts de lignes.
Genre :
dos2unix script_tri.sh
Xfce 4.18 / https://github.com/hotnuma
En ligne
#21 Le 20/09/2021, à 11:42
- MicP
Re : [Résolu] Création de dossier selon nom fichier
Oui, c'est bien le genre de message d'erreur résultant de la tentative d'exécution d'un script
dont le contenu a été créé ou/et édité par un programme qui a inséré des retours à la ligne de type msdos <=> 0x0d0a au lieu de 0x0a
Mais si c'est le cas, il y aura peut-être aussi d'autres caractères parasites qui auront été insérés dans le fichier par le programme d'édition de texte,
ou pire si c'est un programme de traitement de texte qui a été utilisé, (et pire encore si ce script a été créé par un programme windows).
=======
Donne le retour complet (retour utilisable de commande) de la ligne de commande suivante :
hd /opt/application/98cas1/G05R00C00/transferthttp/Draw/script_tri.sh
Voilà ce que ça devrait donner :
ad98cas1@dv98cas03:~ $ hd /opt/application/98cas1/G05R00C00/transferthttp/Draw/script_tri.sh
00000000 23 21 2f 62 69 6e 2f 62 61 73 68 0a 0a 72 65 70 |#!/bin/bash..rep|
00000010 53 72 63 3d 22 24 31 22 20 20 20 23 20 4e 6f 6d |Src="$1" # Nom|
00000020 20 64 75 20 72 c3 a9 70 65 72 74 6f 69 72 65 20 | du r..pertoire |
00000030 c3 a0 20 74 72 61 69 74 65 72 20 65 74 20 71 75 |.. traiter et qu|
00000040 69 20 65 73 74 20 64 6f 6e 6e c3 a9 20 65 6e 20 |i est donn.. en |
00000050 70 61 72 61 6d c3 a8 74 72 65 20 61 75 20 73 63 |param..tre au sc|
00000060 72 69 70 74 0a 0a 6d 61 52 65 67 65 78 3d 27 28 |ript..maRegex='(|
00000070 2e 2a 29 2d 2d 28 2e 2a 29 27 0a 66 6f 72 20 66 |.*)--(.*)'.for f|
00000080 20 69 6e 20 22 24 72 65 70 53 72 63 22 2f 2a 3b | in "$repSrc"/*;|
00000090 20 64 6f 0a 20 20 20 20 5b 5b 20 24 66 20 3d 7e | do. [[ $f =~|
000000a0 20 24 6d 61 52 65 67 65 78 20 5d 5d 0a 20 20 20 | $maRegex ]]. |
000000b0 20 72 65 70 3d 22 24 7b 42 41 53 48 5f 52 45 4d | rep="${BASH_REM|
000000c0 41 54 43 48 5b 31 5d 7d 22 0a 20 20 20 20 66 69 |ATCH[1]}". fi|
000000d0 63 68 3d 22 24 7b 42 41 53 48 5f 52 45 4d 41 54 |ch="${BASH_REMAT|
000000e0 43 48 5b 32 5d 7d 22 0a 20 20 20 20 5b 20 2d 64 |CH[2]}". [ -d|
000000f0 20 22 24 72 65 70 22 20 5d 20 7c 7c 20 6d 6b 64 | "$rep" ] || mkd|
00000100 69 72 20 22 24 72 65 70 22 0a 20 20 20 20 6d 76 |ir "$rep". mv|
00000110 20 2d 2d 62 61 63 6b 75 70 3d 6e 75 6d 62 65 72 | --backup=number|
00000120 65 64 20 22 24 66 22 20 22 24 72 65 70 2f 24 66 |ed "$f" "$rep/$f|
00000130 69 63 68 22 0a 64 6f 6e 65 0a |ich".done.|
0000013a
ad98cas1@dv98cas03:~ $
Dernière modification par MicP (Le 20/09/2021, à 17:36)
Hors ligne
#22 Le 20/09/2021, à 12:28
- hotnuma
Re : [Résolu] Création de dossier selon nom fichier
Il faut peut être utiliser "#!/usr/bin/env" au debut du script ?
#!/usr/bin/env bash
https://stackoverflow.com/questions/163 … r-bin-bash
Donc comme ceci :
#!/usr/bin/env bash
repSrc="$1" # Nom du répertoire à traiter et qui est donné en paramètre au script
maRegex='(.*)--(.*)'
for f in "$repSrc"/*; do
[[ $f =~ $maRegex ]]
rep="${BASH_REMATCH[1]}"
fich="${BASH_REMATCH[2]}"
[ -d "$rep" ] || mkdir "$rep"
mv --backup=numbered "$f" "$rep/$fich"
done
Xfce 4.18 / https://github.com/hotnuma
En ligne
#23 Le 20/09/2021, à 18:14
- Watael
Re : [Résolu] Création de dossier selon nom fichier
je n'ai toujours pas compris l'intérêt de /usr/bin/env bash : si on ne sait pas où est bash, comment peut-on être sûr de l'emplacement de env ?
le ^M est éloquent : mauvais format de fichier. donc, dos2unix.
pardon, /usr/bin/env dos2unix.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#24 Le 21/09/2021, à 09:53
- Terminus78
Re : [Résolu] Création de dossier selon nom fichier
Bonjour à tous,
Voir avec dos2unix pour convertir les sauts de lignes. tongue
Genre :
dos2unix script_tri.sh
Voici le retour obtenu :
./script_tri.sh: line 12: syntax error: unexpected end of file
---
Donne le retour complet (retour utilisable de commande) de la ligne de commande suivante :
hd /opt/application/98cas1/G05R00C00/transferthttp/Draw/script_tri.sh
Voici le retour :
$ hd /opt/application/98cas1/G05R00C00/transferthttp/Draw/script_tri.sh
00000000 23 21 2F 62 69 6E 2F 62 - 61 73 68 0D 0A 0D 0A 72 |#!/bin/bash....r|
00000010 65 70 53 72 63 3D 22 24 - 31 22 20 20 20 23 20 4E |epSrc="$1" # N|
00000020 6F 6D 20 64 75 20 72 C3 - A9 70 65 72 74 6F 69 72 |om du r..pertoir|
00000030 65 20 C3 A0 20 74 72 61 - 69 74 65 72 20 65 74 20 |e .. traiter et |
00000040 71 75 69 20 65 73 74 20 - 64 6F 6E 6E C3 A9 20 65 |qui est donn.. e|
00000050 6E 20 70 61 72 61 6D C3 - A8 74 72 65 20 61 75 20 |n param..tre au |
00000060 73 63 72 69 70 74 0D 0A - 0D 0A 6D 61 52 65 67 65 |script....maRege|
00000070 78 3D 27 28 2E 2A 29 2D - 2D 28 2E 2A 29 27 0D 0A |x='(.*)--(.*)'..|
00000080 66 6F 72 20 66 20 69 6E - 20 22 24 72 65 70 53 72 |for f in "$repSr|
00000090 63 22 2F 2A 3B 20 64 6F - 0D 0A 20 20 20 20 5B 5B |c"/*; do.. [[|
000000a0 20 24 66 20 3D 7E 20 24 - 6D 61 52 65 67 65 78 20 | $f =~ $maRegex |
000000b0 5D 5D 0D 0A 20 20 20 20 - 72 65 70 3D 22 24 7B 42 |]].. rep="${B|
000000c0 41 53 48 5F 52 45 4D 41 - 54 43 48 5B 31 5D 7D 22 |ASH_REMATCH[1]}"|
000000d0 0D 0A 20 20 20 20 66 69 - 63 68 3D 22 24 7B 42 41 |.. fich="${BA|
000000e0 53 48 5F 52 45 4D 41 54 - 43 48 5B 32 5D 7D 22 0D |SH_REMATCH[2]}".|
000000f0 0A 20 20 20 20 5B 20 2D - 64 20 22 24 72 65 70 22 |. [ -d "$rep"|
00000100 20 5D 20 7C 7C 20 6D 6B - 64 69 72 20 22 24 72 65 | ] || mkdir "$re|
00000110 70 22 0D 0A 20 20 20 20 - 6D 76 20 2D 2D 62 61 63 |p".. mv --bac|
00000120 6B 75 70 3D 6E 75 6D 62 - 65 72 65 64 20 22 24 66 |kup=numbered "$f|
00000130 22 20 22 24 72 65 70 2F - 24 66 69 63 68 22 0D 0A |" "$rep/$fich"..|
00000140 64 6F 6E 65 0D 0A - |done..|
Hors ligne
#25 Le 21/09/2021, à 10:24
- MicP
Re : [Résolu] Création de dossier selon nom fichier
Oui, c'est bien ça,
il faut supprimer tous les retours de charriot (0x0D) qui sont dans ce fichier
en lançant la ligne de commande suivante :
sed -i 's/\r//g' /opt/application/98cas1/G05R00C00/transferthttp/Draw/script_tri.sh
Hors ligne