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 16/09/2021, à 16: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 smile

Dernière modification par Terminus78 (Le 22/09/2021, à 11:21)

Hors ligne

#2 Le 16/09/2021, à 17: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, à 17:24

MicP

Re : [Résolu] Création de dossier selon nom fichier

Bonjour

Terminus78 a écrit :
…
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 ?

Terminus78 a écrit :
…
- 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, à 17:25)

Hors ligne

#4 Le 16/09/2021, à 17: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
MicP a écrit :

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 smile

Et du coup, effectivement je souhaiterais que mes dossiers se nomme comme les IDs.

Hors ligne

#5 Le 16/09/2021, à 18: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. big_smile


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 résolu, 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, à 19:50

MicP

Re : [Résolu] Création de dossier selon nom fichier

Dans son message #1, Terminus78 a écrit :

… 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, à 10:19)

Hors ligne

#7 Le 17/09/2021, à 15: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, à 16:00)

Hors ligne

#8 Le 17/09/2021, à 16: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, à 16:06)

Hors ligne

#9 Le 17/09/2021, à 16:23

Terminus78

Re : [Résolu] Création de dossier selon nom fichier

Re,

MicP a écrit :

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
MicP a écrit :
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"
MicP a écrit :

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 smile

Hors ligne

#10 Le 17/09/2021, à 16: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, à 17: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, à 17:08)

Hors ligne

#12 Le 17/09/2021, à 17: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, à 17: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

Hors ligne

#13 Le 17/09/2021, à 17: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, à 17:31)

Hors ligne

#14 Le 17/09/2021, à 17: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, à 17: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, à 17: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

Hors ligne

#16 Le 17/09/2021, à 17:38

MicP

Re : [Résolu] Création de dossier selon nom fichier

Dans son message #14,Terminus78 a écrit :

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 :

Dans son message #9, Terminus78 a écrit :

…
-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, à 18:13)

Hors ligne

#17 Le 17/09/2021, à 17: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 sad.

Hors ligne

#18 Le 17/09/2021, à 17:59

MicP

Re : [Résolu] Création de dossier selon nom fichier

Dans son message #14,Terminus78 a écrit :

…
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, à 18:16)

Hors ligne

#19 Le 20/09/2021, à 10: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, à 10: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. tongue

Genre :

dos2unix script_tri.sh

Xubuntu / GitHub

Hors ligne

#21 Le 20/09/2021, à 12: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, à 18:36)

Hors ligne

#22 Le 20/09/2021, à 13: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

Xubuntu / GitHub

Hors ligne

#23 Le 20/09/2021, à 19: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. lol


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#24 Le 21/09/2021, à 10:53

Terminus78

Re : [Résolu] Création de dossier selon nom fichier

Bonjour à tous,

hotnuma a écrit :

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

---

MicP a écrit :

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, à 11: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