#1 Le 29/06/2023, à 15:04
- Artwork
[RÉSOLU] Stocker les noms des dossiers où sont les fichiers...
Bonjour,
Je vais essayer d'expliquer plus clairement le besoin que dans le titre
Dans l'exemple ci-dessous, j'ai un nombre de dossiers et fichiers aléatoires. Leurs noms respectifs sont également aléatoires.
Les extensions peuvent être PNG, JPG ou JPEG. Si trop chiant, j'ai une commande pour tout convertir en PNG donc on peut partir que sur du PNG si besoin.
~/Tmp ❯ ls -1 Source/*
Source/Folder_1:
adaway.png
adobe_scan.png
alertes_info.png
alta.png
Source/Folder_2:
applist_detector.png
aqua_mail.png
Source/Folder_3:
clavier_microsoft_swiftkey.png
Source/Folder_4:
databackup.png
data_monitor.png
doable.png
documents_onlyoffice.png
~/Tmp ❯
On a donc ici 4 dossiers contenant n fichiers.
Je cherche à :
1/ Déplacer tous les fichiers vers le dossier parent donc sous le dossier Source.
... Ensuite j'optimise les fichiers via un logiciel GUI
2/ Je remets les fichiers dans les dossiers où ils étaient avant.
Il faut donc 2 scripts : pour déplacer des dossiers Folder* vers Source et inversement.
Merci d'avance pour votre aide.
Dernière modification par Artwork (Le 30/06/2023, à 14:29)
KDE neon user 20.04
Lenovo IdeaPad L340-15IRH Gaming
Mesa Intel UHD Graphics 630 / NVIDIA GP107M [GeForce GTX 1050 3 GB Max-Q]
8 x Intel Core i5-9300H
Hors ligne
#2 Le 29/06/2023, à 17:39
- Watael
Re : [RÉSOLU] Stocker les noms des dossiers où sont les fichiers...
salut,
crées des liens symboliques.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 29/06/2023, à 18:24
- Coeur Noir
Re : [RÉSOLU] Stocker les noms des dossiers où sont les fichiers...
L'idée étant :
⋅ dans un seul dossier tu crées des liens symboliques vers tes diverses images ( qui se trouvent éparpillées parmi plusieurs emplacements ) ;
⋅ avec ton logiciel en GUI tu travailles seulement dans le seul dossier où tu as les liens symboliques.
La question suivante pourrait être : comment automatiser la création des liens symboliques dans /chemin/Source/ pour les .jpg et .png contenus dans /chemin/Source/sous-dossier(s)
Je propose sans certitude :
find /chemin/Source/* -type f -iname \*.jpg -o -type f -iname \*.png -exec ln -s /chemin/Source/{} \;
→ il me semble que Source/* regardera dans le premier niveau de (sous-)dossier(s) dans Source [ c'est là que j'ai un gros doute ]
→ -type f pour ne chercher que des fichiers
→ -iname \*.jpg -o -type f -iname \*.png pour prendre jpg et (ou) png [ peut s'écrire aussi : -type f \( -iname \*.jpg -o -iname \*.png \) ]
exemple
Voir rectifications au message #5 plus bas pour une commande qui a créé des liens, dans un contexte proche.
Et le message #6 de Bruno
Qu'est ce qui empêche l'application graphique utilisée (laquelle ?) de traiter par lot des fichiers présents dans différents dossiers
Sous-entendu : est-il vraiment nécessaire de passer par des déplacements de fichiers / ou des liens vers eux ?
Dernière modification par Coeur Noir (Le 29/06/2023, à 21:34)
Débuter ⋅ Doc ⋅ Bien rédiger ⋅ Retour commande ⋅ Insérer image | illustrations & captures d'écran < ⋅ >
Hors ligne
#4 Le 29/06/2023, à 18:25
- erresse
Re : [RÉSOLU] Stocker les noms des dossiers où sont les fichiers...
+1 Watael, c'est justement ce que je m’apprêtais à proposer comme solution...
Plutot que de déplacer les fichiers, laisse-les là où ils sont et crée des liens symboliques vers ces emplacements dans un sous-répertoire dédié. Tu pourras ainsi traiter directement les fichiers en place avec ton GUI et en avoir la liste grâce aux liens symboliques qui les représentent.
Inspire-toi de ce script pour faire le boulot chez toi :
#!/bin/bash
> tests/lisrep
for rep in tests/*; do [ -d "$rep" ] && echo "$rep" >> tests/lisrep; done
echo "EOF" >> tests/lisrep
> tests/lisfic
while [ "$rep" != "EOF" ]; do
read rep
for fic in "$rep"/*; do [ -f "$fic" ] && echo "$fic" >> tests/lisfic; done
done < tests/lisrep
echo "EOF" >> tests/lisfic
while [ "$fic" != "EOF" ]; do
read fic
ln -s "$HOME/$fic" tests/liens/
done < tests/lisfic
Bon, contrairement à Watael qui est un puriste du shell, j'ai fait un bricolage de mon crû, mais il a le mérite de fonctionner et d'être facilement compréhensible et adaptable. Bon développement.
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
#5 Le 29/06/2023, à 19:23
- Coeur Noir
Re : [RÉSOLU] Stocker les noms des dossiers où sont les fichiers...
Rectifications… y'a sans doute mieux mais je ne m'en sors qu'en utilisant des chemins absolus avec find et les parenthèses :
find ~/Bureau/TEST/Source/ -type f \( -iname \*.jpg -o -iname \*.png \) -exec ln -s {} ~/Bureau/TEST/Source/ \;
Sachant qu'au début j'ai :
django@ASGARD:~$ ls -la ~/Bureau/TEST/*/*
/home/django/Bureau/TEST/Source/AAA:
total 21984
drwxrwsr-x 2 django maison 4096 juin 29 20:06 .
drwxrwsr-x 4 django maison 4096 juin 29 20:16 ..
-rw-rw-r-- 1 django maison 17267131 mai 17 2017 01.png
-rw-rw-r-- 1 django maison 5232995 avril 15 00:21 04.jpg
/home/django/Bureau/TEST/Source/BBB:
total 23144
drwxrwsr-x 2 django maison 4096 juin 29 20:06 .
drwxrwsr-x 4 django maison 4096 juin 29 20:16 ..
-rw-rw-r-- 1 django maison 19035097 mai 17 2017 02.png
-rw-rw-r-- 1 django maison 4652626 avril 15 00:21 03.jpg
django@ASGARD:~$
et après la commande find :
django@ASGARD:~$ ls -la ~/Bureau/TEST/*/*
lrwxrwxrwx 1 django maison 42 juin 29 20:18 /home/django/Bureau/TEST/Source/01.png -> /home/django/Bureau/TEST/Source/AAA/01.png
lrwxrwxrwx 1 django maison 42 juin 29 20:18 /home/django/Bureau/TEST/Source/02.png -> /home/django/Bureau/TEST/Source/BBB/02.png
lrwxrwxrwx 1 django maison 42 juin 29 20:18 /home/django/Bureau/TEST/Source/03.jpg -> /home/django/Bureau/TEST/Source/BBB/03.jpg
lrwxrwxrwx 1 django maison 42 juin 29 20:18 /home/django/Bureau/TEST/Source/04.jpg -> /home/django/Bureau/TEST/Source/AAA/04.jpg
/home/django/Bureau/TEST/Source/AAA:
total 21984
drwxrwsr-x 2 django maison 4096 juin 29 20:06 .
drwxrwsr-x 4 django maison 4096 juin 29 20:18 ..
-rw-rw-r-- 1 django maison 17267131 mai 17 2017 01.png
-rw-rw-r-- 1 django maison 5232995 avril 15 00:21 04.jpg
/home/django/Bureau/TEST/Source/BBB:
total 23144
drwxrwsr-x 2 django maison 4096 juin 29 20:06 .
drwxrwsr-x 4 django maison 4096 juin 29 20:18 ..
-rw-rw-r-- 1 django maison 19035097 mai 17 2017 02.png
-rw-rw-r-- 1 django maison 4652626 avril 15 00:21 03.jpg
django@ASGARD:~$
soit sous Sources, les liens symboliques qui ciblent les images jpg et png qui sont sous Source/AAA et Sources/BBB
Débuter ⋅ Doc ⋅ Bien rédiger ⋅ Retour commande ⋅ Insérer image | illustrations & captures d'écran < ⋅ >
Hors ligne
#6 Le 29/06/2023, à 19:27
- bruno
Re : [RÉSOLU] Stocker les noms des dossiers où sont les fichiers...
Attention, cela ressemble à un problème XY.
Qu'est ce qui empêche l'application graphique utilisée (laquelle ?) de traiter par lot des fichiers présents dans différents dossiers.
#7 Le 29/06/2023, à 20:24
- Watael
Re : [RÉSOLU] Stocker les noms des dossiers où sont les fichiers...
find ~/Bureau/TEST/Source/ -maxdepth 2 -type f -regex '.*\.\(jpg\|png\)$' -exec ln -s {} ~/Bureau/TEST/Source/
?
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#8 Le 30/06/2023, à 07:55
- Artwork
Re : [RÉSOLU] Stocker les noms des dossiers où sont les fichiers...
Bonjour,
Je vais prendre un moment pour faire des tests mais pour répondre à la question sur l'appli graphique. C'est Curtail installé en Flatpak.
Le drag and drop ne fonctionne plus (issue Github) donc faut ouvrir les fichiers via l'explorateur de fichiers et la boîte de dialogues n'accepte pas la sélection de plusieurs dossiers.
Merci.
KDE neon user 20.04
Lenovo IdeaPad L340-15IRH Gaming
Mesa Intel UHD Graphics 630 / NVIDIA GP107M [GeForce GTX 1050 3 GB Max-Q]
8 x Intel Core i5-9300H
Hors ligne
#9 Le 30/06/2023, à 09:26
- Artwork
Re : [RÉSOLU] Stocker les noms des dossiers où sont les fichiers...
Rectifications… y'a sans doute mieux mais je ne m'en sors qu'en utilisant des chemins absolus avec find et les parenthèses :
find ~/Bureau/TEST/Source/ -type f \( -iname \*.jpg -o -iname \*.png \) -exec ln -s {} ~/Bureau/TEST/Source/ \;
Les liens symboliques se sont bien créés, je peux sélectionner les fichiers générés sous /Source avec Curtail.
Sauf qu'une fois le fichier optimisé, le lien symbolique est cassé. Testé avec adaway.png :
[modéré]https://i.imgur.com/LAaTXkX.png[/modéré] (Taille de l'image ! Il faut faire un copier/coller des retours dans le terminal pas une image, merci.)
KDE neon user 20.04
Lenovo IdeaPad L340-15IRH Gaming
Mesa Intel UHD Graphics 630 / NVIDIA GP107M [GeForce GTX 1050 3 GB Max-Q]
8 x Intel Core i5-9300H
Hors ligne
#10 Le 30/06/2023, à 10:41
- Watael
Re : [RÉSOLU] Stocker les noms des dossiers où sont les fichiers...
pourquoi ne pas utiliser imagemagick ? si c'est pour faire du traitement par lot...
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#11 Le 30/06/2023, à 11:06
- Artwork
Re : [RÉSOLU] Stocker les noms des dossiers où sont les fichiers...
J'en ai testé des tas (dont imagemagick je pense) et c'est Curtail qui me donne le meilleur résultat (mix perte de qualité raisonnable et optimisation).
KDE neon user 20.04
Lenovo IdeaPad L340-15IRH Gaming
Mesa Intel UHD Graphics 630 / NVIDIA GP107M [GeForce GTX 1050 3 GB Max-Q]
8 x Intel Core i5-9300H
Hors ligne
#12 Le 30/06/2023, à 11:24
- Coeur Noir
Re : [RÉSOLU] Stocker les noms des dossiers où sont les fichiers...
Le dossier « Tmp » c'est un dossier « normal » que tu as créé manuellement ou c'est un « vrai » dossier temporaire en mode 1777 ?
Ce que tu montres ( au final ) pour adaway.png n'est pas un lien cassé mais un fichier « normal » et ça n'aurait pas dû être possible :
tant qu'un élément nommé « adaway.png » existe dans un emplacement, on ne peut pas y créer un nouvel élément de même nom.
( Or un élément « lien » est déjà un fichier, un fichier spécial, mais fichier quand même. )
Ça suggère que l'application Curtail déplace les éléments qu'elle traite ? ? ? Puis les ré-écrit dans l'emplacement d'origine ? Flatpak ? Un rapport avec le fonctionnement ± confiné de ce genre d'applications ?
Pour vérifier cette hypothèse ( c'est la faute à flatpak ), il faudrait désinstaller le flatpak de Curtail et privilégier son installation « classique » au format APT/.deb via le ppa dédié → https://launchpad.net/~apandada1/+archi … tu/curtail
( mais ça se trouve, le .deb de Curtail procède aussi de cette manière, en déplaçant les fichiers à traiter dans un emplacement temporaire… )
Et juste pour qu'on sache de quel système / OS on parle :
echo ; lsb_release -dcs; uname -srpi; echo $DESKTOP_SESSION sous $XDG_SESSION_TYPE parmi :; ls /usr/share/xsessions ; echo
( privilégie les retours d'infos au format texte - qu'on peut plus facilement copier, coller, commenter - plutôt que de poster des captures d'écran du terminal ).
Débuter ⋅ Doc ⋅ Bien rédiger ⋅ Retour commande ⋅ Insérer image | illustrations & captures d'écran < ⋅ >
Hors ligne
#13 Le 30/06/2023, à 12:36
- erresse
Re : [RÉSOLU] Stocker les noms des dossiers où sont les fichiers...
Ce que tu montres ( au final ) pour adaway.png n'est pas un lien cassé mais un fichier « normal » et ça n'aurait pas dû être possible :
tant qu'un élément nommé « adaway.png » existe dans un emplacement, on ne peut pas y créer un nouvel élément de même nom.
Le fichier "adaway.png" qui est juste sous "Source/" est certainement un résidu d'un essai précédent de Artwork. Lors de la création des liens, je suppose que ce lien-là n'a tout simplement pas été créé parce-qu'un fichier de même nom existait déjà, voilà tout.
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
#14 Le 30/06/2023, à 13:34
- Artwork
Re : [RÉSOLU] Stocker les noms des dossiers où sont les fichiers...
~ ❯ echo ; lsb_release -dcs; uname -srpi; echo $DESKTOP_SESSION sous $XDG_SESSION_TYPE parmi :; ls /usr/share/xsessions ; echo
KDE neon 5.27
jammy
Linux 5.19.0-46-generic x86_64 x86_64
plasma sous x11 parmi :
plasma.desktop
~ ❯
Je vais tester Curtail en mode deb dans une VM.
Et non, le adaway.png n'est pas un résidu d'un précédent test.
La preuve en vidéo : https://drive.proton.me/urls/JZBSWB502R#Bhea1vtIC2Vn
KDE neon user 20.04
Lenovo IdeaPad L340-15IRH Gaming
Mesa Intel UHD Graphics 630 / NVIDIA GP107M [GeForce GTX 1050 3 GB Max-Q]
8 x Intel Core i5-9300H
Hors ligne
#15 Le 30/06/2023, à 14:29
- Artwork
Re : [RÉSOLU] Stocker les noms des dossiers où sont les fichiers...
J'ai une bonne et une mauvaise nouvelle :
- La mauvaise : le comportement est identique sur une Xubuntu avec la version ppa
- La bonne : le glisser/déposer fonctionne avec la version ppa donc je peux sélectionner plusieurs dossiers en une seule fois.
Merci pour votre aide et bon week-end !
KDE neon user 20.04
Lenovo IdeaPad L340-15IRH Gaming
Mesa Intel UHD Graphics 630 / NVIDIA GP107M [GeForce GTX 1050 3 GB Max-Q]
8 x Intel Core i5-9300H
Hors ligne