Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites". Attention, le forum rencontre actuellement quelques difficultés. En cas d'erreur 502, il ne faut pas re-valider l'envoi d'un message ou l'ouverture d'une discussion, au risque de créer un doublon.

La section divers se réorganise ! De nouvelles sous-sections à venir. (plus d'infos + donner son avis)

#1 Le 24/03/2014, à 00:49

cristobal78

supprimer les blancs dans tous les noms de fichiers d'un répertoire

bonsoir à tous

Depuis peu je m'intéresse au fonctionnement de NautilusScript et donc, si j'ai bien compris, à la possibilité d’ajouter des fonctionnalités (personnelles) lorsque dans le navigateur (nautilus) 'on fait un "click droit sur un nom de fichier" > "script"  > convertir (ou bien créer un lanceur, ...)

Donc je voudrai ajouter une option de menu qui apparaîtrait lors
- d'un click droit sur un répertoire
et
- qui me proposerait de remplacer dans les noms de fichiers de ce répertoire tous les "blancs" (ou espaces) par des "_" (underscore).

J'ai tant bien que mal trouvé 2 solutions qui marchent (ou qui semble marcher, ne soyons pas trop confiant !) :

for oldname in *\ * ;  do newname=`echo $oldname | tr "[:blank:]" "_"`; mv "$oldname" "$newname" ; done

et

ls  -a | while read fichier ; do mv "$fichier" "$(echo $fichier | sed -e 's/ /_/g')" 2>/dev/null ; done

Question
---------------
Ces 2 solutions sont elles équivalentes ?
Sinon laquelle faut-il choisir selon vous ?

Bonne nuit à tous.


1 pc en double boot  12.04 LTS/Vista et 2 laptop 12.04 LTS / WinXP en virtualbox

Hors ligne

#2 Le 24/03/2014, à 01:13

aduxas

Re : supprimer les blancs dans tous les noms de fichiers d'un répertoire

Les deux me semblent un peu lourd (car boucle, sous-shells).  Quid de

rename 's/ /_/g' *

Dernière modification par aduxas (Le 25/03/2014, à 02:17)

Hors ligne

#3 Le 24/03/2014, à 17:20

cristobal78

Re : supprimer les blancs dans tous les noms de fichiers d'un répertoire

salut aduxas

merci pour le "rename".

J'ai été voir dans le man mais ce n'était pas très clair.

J'ai aussi regardé le contenu de ce fichier dans /usr/bin qui est sembe t il écrit en perl et j'avoue que je n'ai pas compris grand chose à la syntaxe !

Enfin j'ai testé ta commande sur un répertoire d'essai et ça à l'air de marcher.

Y a t il un moyen de descendre dans les sous-répertoires un peu comme on peut le faire avec  -r ou -R dans certaines commandes ?


1 pc en double boot  12.04 LTS/Vista et 2 laptop 12.04 LTS / WinXP en virtualbox

Hors ligne

#4 Le 25/03/2014, à 02:14

aduxas

Re : supprimer les blancs dans tous les noms de fichiers d'un répertoire

cristobal78 a écrit :

Y a t il un moyen de descendre dans les sous-répertoires un peu comme on peut le faire avec  -r ou -R dans certaines commandes ?

Je ne crois pas..  Une méthode:

find . -exec rename 's/ /_/g' {} \;

EDIT:  utiliser "find -type f" si tu ne veux pas renommer les dossiers.

Dernière modification par aduxas (Le 25/03/2014, à 02:17)

Hors ligne

#5 Le 25/03/2014, à 09:27

cristobal78

Re : supprimer les blancs dans tous les noms de fichiers d'un répertoire

Salut Aduxas

il va falloir que je décortique ta commande car en première lecture ça n'a pas l'air évident de comprendre ce qu'elle fait (ou ne fait pas) précisément  en particulier exec et {}
J'y vais de ce pas  smile


1 pc en double boot  12.04 LTS/Vista et 2 laptop 12.04 LTS / WinXP en virtualbox

Hors ligne

#6 Le 25/03/2014, à 10:11

cristobal78

Re : supprimer les blancs dans tous les noms de fichiers d'un répertoire

je me suis contenté d'essayer la cde sur la structure suivante :

- un répertoire nommé "rep" contenant un fichier "fichier 1" (espace entre le "r " et le "1")
- un sous répertoire "sous rep"  (espace entre sous et rep) dans "rep" et qui contient un fichier "fichier 2".

Test de la commande
---------------------------
Je me mets dans "rep" et lance la cde.

Résultat
-------------
"rep" reste "rep" : ok
et son contenu "fichier 1" devient "fichier_1" : ok

"sous rep" devient "sous_rep" : ok
"fichier 2" reste "fichier 2" (au lieu de "fichier_2") : PAS OK  neutral


1 pc en double boot  12.04 LTS/Vista et 2 laptop 12.04 LTS / WinXP en virtualbox

Hors ligne

#7 Le 25/03/2014, à 10:50

pingouinux

Re : supprimer les blancs dans tous les noms de fichiers d'un répertoire

Bonjour,
Essaye ceci (petite adaptation de la commande d'aduxas) :

find . -depth -execdir rename 's/ /_/g' {} \;

Hors ligne

#8 Le 25/03/2014, à 11:06

cristobal78

Re : supprimer les blancs dans tous les noms de fichiers d'un répertoire

Salut pingouinux

cette fois ça marche.:) et merci pour vos efforts conjugués smile
Mais comme je n'aime l'idée d'appliquer des cdes sans comprendre j'ai encore besoin d'un petit coup de pouce de vos parts.

En particulier :

- Bien que j'ai regardé info man sur sed  mais je n'ai pas trouvé d'explication pour le rôle de {} dans vos commandes ( à aduxas et à toi), ni pour celui du "\;" à la fin.

- de même quelle différence entre exec et execdir

- je suppose que -depth c'est l'équivalent d'un -r ou -R (récursif) ?
Vrai  ou faux ?


1 pc en double boot  12.04 LTS/Vista et 2 laptop 12.04 LTS / WinXP en virtualbox

Hors ligne

#9 Le 25/03/2014, à 11:31

pingouinux

Re : supprimer les blancs dans tous les noms de fichiers d'un répertoire

  • find fait une recherche récursive.

  • Dans cette commande find, {} est remplacé successivement par le nom des fichiers ou répertoires trouvés.

  • \; indique la fin de la commande initiée par -exec ou -execdir

  • -depth : les fichiers sont traités avant les répertoires qui les contiennent (sinon on renomme le répertoire, et le répertoire initial n'existe plus quand on traite le fichier).

  • -execdir : la commande qui suit est exécutée comme si on était dans le répertoire (pour ne renommer que le fichier, et pas le chemin complet; sinon, quand on veut traiter le répertoire au-dessus, il a changé de nom).

J'espère que c'est plus clair. Tu peux trouver ces infos dans man find.

Hors ligne

#10 Le 25/03/2014, à 19:06

cristobal78

Re : supprimer les blancs dans tous les noms de fichiers d'un répertoire

Hello

donc j'ai testé et adopté la commande de pingouinux qui marche  ... dans un terminal.

Là où ça ne va plus c'est (voir mon post initial) au moment d'accéder  à cette commande depuis un click droit sur le répertoire de l'arborescence de fichiers, puis "Scripts" pour voir dérouler les différents scripts de .gnome2/nautilus-scripts.

J'ai par défaut 3 scripts en python qui permettent la conversion d'image en gif, jpeg et png et bien sur à côté mon script  appelé "blanc2underscore" dont les droits,  je préfère tout de suite le préciser, sont en "755" comme pour les autres scripts.
En voici le contenu :

#!/bin/bash
find . -depth {} -execdir rename 's/ /_/g'  \;

A priori c'est bon, pourtant après click droit > Scripts le fichier rien ne se passe et mes fichiers gardent leurs blancs !
Je dois faire une erreur qq part mais où ?

Erreur d'écriture :

#!/bin/bash
find . -depth  -execdir rename 's/ /_/g' {} \;

Dernière modification par cristobal78 (Le 25/03/2014, à 19:08)


1 pc en double boot  12.04 LTS/Vista et 2 laptop 12.04 LTS / WinXP en virtualbox

Hors ligne

#11 Le 25/03/2014, à 19:12

pingouinux

Re : supprimer les blancs dans tous les noms de fichiers d'un répertoire

Désolé, je ne peux pas t'aider, n'utilisant pratiquement que la ligne de commande. sad

Hors ligne

#12 Le 26/03/2014, à 00:30

Postmortem

Re : supprimer les blancs dans tous les noms de fichiers d'un répertoire

Salut,
Il faut remplacer le point dans la commande find par la variable qui contient le nom des répertoires sélectionnés dans Nautilus.
Ça semble être la variable $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS.
Plus d'infos ici (paragraphe 4)


Trusty Tahr (64 bits), Athlon64 3800+, ATI Radeon HD4870

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#13 Le 26/03/2014, à 01:15

cristobal78

Re : supprimer les blancs dans tous les noms de fichiers d'un répertoire

salut postmortem

j'avoue que je ne sais plus trop comment m'y prendre !
J'ai lu le § 4 de la doc et on ne peut pas dire que son contenu soit rassurant avec ses bugs et ses risques.

D'autant qu' après avoir fait plusieurs essais avec la cde de pingouinux (qui marche qd on l'exécute depuis un terminal) j'ai eu la surprise de voir que ça marchait avec le coup du click droit > scripts   etc ... mais qd j'ai voulu le refaire : que dalle ! Impossible de recommencer.

J'ai regardé les processus par "ps ax" et j'en ai tué quelques uns avant de recommencer.
Et là j'ai du faire une bourde car subitement je me suis aperçu -très désagréable surprise- que j'avais intégralement perdu tous, je dis bien tous, mes mails arborescence et filtres compris ! mad
Heureusement que j'avais une sauvegarde d'il y a 3 jours sur un autre PC !

Bref j'ai du reconstituer toute ma messagerie et maintenant j'ai un peu peur d'utiliser la variable $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS que d'ailleurs je ne connais pas et ne sais pas où mettre dans mon scripts. sad


1 pc en double boot  12.04 LTS/Vista et 2 laptop 12.04 LTS / WinXP en virtualbox

Hors ligne

#14 Le 26/03/2014, à 09:02

Postmortem

Re : supprimer les blancs dans tous les noms de fichiers d'un répertoire

Bonjour !
J'ai personnellement jamais utilisé les scripts Nautilus mais si j'ai bien compris, dans un script appelé par Nautilus, la variable contient les noms de fichiers/répertoires qui étaient sélectionnés avant de faire appel au script.
Ce que tu pourrais faire, c'est créer une arbo de test dans /tmp, par exemple /tmp/essai et dedans tu y mets des fichiers avec des espaces dans le nom.
Dans le script, tu mettrais :

#!/bin/bash
find "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" -depth > /tmp/listing.txt

Puis tu fais un clic droit sur ton repertoire /tmp/essai et tu lances ton script. Si c'est ok, tu auras un fichier listing.txt dans /tmp qui contiendra la liste des fichiers/répertoires que tu avais mis dans /tmp/essai.
Si c'est bon, tu pourras alors mettre le find qui fait le rename dans ton script :

#!/bin/bash
find "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" -depth  -execdir rename 's/ /_/g' {} \;

Ensuite, si ça fonctionne, on pourra voir pour faire marcher le script en sélectionnant plusieurs dossiers.


Trusty Tahr (64 bits), Athlon64 3800+, ATI Radeon HD4870

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#15 Le 26/03/2014, à 15:45

cristobal78

Re : supprimer les blancs dans tous les noms de fichiers d'un répertoire

ça a l'air de ne rien faire

find "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" -depth > /tmp/listing.txt

génère un fichier /tmp/listing.txt vide, de même un echo de la variable NAUTILUS..... renvoie du vide.


1 pc en double boot  12.04 LTS/Vista et 2 laptop 12.04 LTS / WinXP en virtualbox

Hors ligne

#16 Le 31/03/2014, à 23:42

Postmortem

Re : supprimer les blancs dans tous les noms de fichiers d'un répertoire

Salut,
Voilà qui semble fonctionner :

#!/bin/bash

exec > /tmp/testtest.txt 2>&1

echo "PWD vaut #$PWD#"

echo "Liste fichiers sélectionnés :"
for i
do
echo "Argument $((++j)) vaut #$i#"
ls -ld "$PWD/$i"
echo ---
done

Je ne sais pas ce qu'il en est de la vue avec arborescence dans Nautilus sur les nouvelles versions mais sur ma version d'Ubuntu, il n'y a plus cette vue et donc le script ci-dessus fonctionne correctement (c'est cette vue qui semblait poser souci avec la méthode que j'utilise ici et de toute manière, le bug semblait résolu).
J'ai essayé avec des noms de fichiers contenant des espaces et même des retours à la ligne. Il suffit de bien penser à utiliser les guillemets.


Trusty Tahr (64 bits), Athlon64 3800+, ATI Radeon HD4870

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

Haut de page ↑