tri adresse mail selon extension pays

je pensais à un truc du genre:
J'ai initialisé une variable "fich" avec un chemin de fichier pour mes tests en changeant le nom final.txt par différents nom. cela à l'air de fonctionner.

C'est pas la méthode la plus rapide (un par un) mais je ne sais plus comment exclure les, non texte et le final.txt
Alors en attendant de trouver mieux !

Bloc de code:
fich="/Users/xxxxxx/Desktop/final.txt"

if [ ${fich: -4} == ".txt" ]
then
echo "c'est un texte"
if [ ${fich: -9} == "final.txt" ]
then
echo “final.txt ne pas supprimer”
else
echo “je supprime fichier texte non final”
fi
else echo "fichier non texte"
fi
 
Dernière édition:
je fais ca et ca fonctionne .

PS j'avais pas vu ton message au dessus zeltron54 avant de poster celui-ci

sleep 1
if [ -e final.txt ]
then
echo "********************************************************"
echo "suppression dans le dossier des fichiers texte source sauf final.txt..."
find . \! -name 'final.txt' -delete
else
echo "pas d'autres fichier que final.txt, aucune suppression..."
echo ""
fi
 
Ok , mais cela efface tous les fichiers autre que final.txt, même les fichiers non texte s'il y en a !
Dans ta demande j'avais cru comprendre que tu voulais effacer tous les fichiers "texte" autre que final.txt.
 
@zeltron54

Faudra que que je relise les posts concernant le traitement des lignes d'un fichier texte pour retirer les "point d'interrogation" et changer les ";" en ":" sans passer par un fichier temporaire, car j'ai reessayé sans fichier temporaire, ca ne fonctionne pas.

L'inconvenient, du fichier temporaire, c'est qu'il sature le disque.
 
bonjour ,

J'etais absent un moment, je reprends ce jour l'accès a macg.co

J'ai un dossier qui s'appelle disons "mondossier".
Dans ce dossier, un fichier qui s'appelle "_test.txt"
Comment renommer le fichier avec le nom du dossier, ce qui donnerai "mondossier_test.txt"

j'ai bien trouvé ca pour mais ce n'est qu'une partie de la réponse.


echo pwd | cut -d"/" -f5

xxx@iMac-de-xxx uk_Pays_Royaume-Uni % echo pwd | cut -d"/" -f5
uk_Pays_Royaume-Uni
xxx@iMac-de-xxx uk_Pays_Royaume-Uni %


merci
 
Dernière édition:
Peux-tu poster le code que tu mets car chez moi cela fonctionne.

sleep 1
echo "********************************************************"
echo "remplace ; par : dans chaque ligne entre email et pass"
echo "et supprime point interrogation en fin de ligne en trop..."
for file in *.txt
do
echo "=> Traitement de $file ..."
sed -i -e "s/;/:/g" "$file"
sed -i -e "s/
$//g" "$file"
done
echo ""

y'a un txt-e qui est créé,
lors du trie, et suppression des doublons, y'a un fichier XXXXXXXXXXX.txt.tmp qui est créé aussi.

SI j'ai bonne memoire j'ai repris le code ci-dessus sinon les "point d'interrogation a l'envers en fin de ligne" etaient supprimés aleatoirement

aaaaaaaa.png
 
Dernière édition:
Bonjour,

Dans ton script, comme déjà dit remplaces tes 2 lignes sed par : "sed -1 '' -e 's/;/:/g' "$fich" idem pour la 2 ième. Ceci fait que le script travaille directement dans le fichier d'origine sans créer de fichiers temp.

ce qui donne pour ces 2 lignes :

Bloc de code:
    sed -i '' -e 's/;/:/g' "$file"
    sed -i '' -e 's/¿$//' "$file"

aaaaaaaa.png

Pour ton script qui trie (je ne le connaît pas) il semble que ce soit lui que crée tes 2 fichiers, pas le script de remplacement de ; et de suppression de ¿
 
  • J’aime
Réactions: francois_francois
J'ai un dossier qui s'appelle disons "mondossier".
Dans ce dossier, un fichier qui s'appelle "_test.txt"
Comment renommer le fichier avec le nom du dossier, ce qui donnerai "mondossier_test.txt"
Pour renommer un fichier la commande est
mv ancien_nom nouveau_nom
Si tu n'as que le chemin du fichier à renommer, tu récupères le nom du répertoire, puis le nom du fichier, tu concatènes les 2 variables, puis tu passes la commande avec les 2 chemins complets.
un exemple:

Bloc de code:
#!/bin/bash
fich="/Users/xxxxxx/Desktop/letest/final.txt"

reper=`dirname $fich`
echo "$reper"
par=`basename $reper`
lefich=`basename $fich`
newnom="$par$lefich"

mv $fich "$reper"/"$newnom"

J'ai mis dans "fich" le chemin du fichier à renommer
je récupère le chemin du dossier dans "reper"
je récupère le nom du dossier dans "par"
je récupère le nom du fichier dans "lefich"
je construis, concatène, le nouveau nom dans "newnom"
puis je renomme le fichier.

Il doit y avoir plus simple, mais je ne connaît pas trop ! ;)
 
  • J’aime
Réactions: francois_francois
@zeltron54

J'ai oublié de préciser :

Concernant ma premiere demande (recupérer le nom d'un dossier).
J'ai 35 dossiers, qui contiennent chacun un fichier texte.

Avant d'etre renommé, tous les fichiers texte dans chacun des 35 dossiers s'appellent tous "final_NOdoublon_Nopointvirgule_trie.txt".

Il faut qu'il devienne "fr_Pays_France_NOdoublon_Nopointvirgule_trie.txt" (pour celui qui se trouve dans le dossier "fr_Pays_France")

Il faut qu'il devienne "com_Pays_Commercial_NOdoublon_Nopointvirgule_trie.txt" (pour celui qui se trouve dans le dossier "com_Pays_Commercial")

etc...pour l'intéralité des dossiers.

Une fois fini ca donne ca:

aaaaaaa.png


Comme j'ajoute regulierement des nouvelles entrées aux fichiers texte, que je relance le script pour les trier, ceux-ci reprennent leur nom de départ "final_NOdoublon_Nopointvirgule_trie.txt" (ca m'aide a voir quel fichier a été traité ou pas avec le mot 'final'), du coup a chaque fois, je dois les renommer a la main, d'ou ma demande pour que cela soit fait de maniere automatique :)
 
Dernière édition:
Il faut qu'il devienne "fr_Pays_France_NOdoublon_Nopointvirgule_trie.txt" (pour celui qui se trouve dans le dossier "fr_Pays_France")
Donc ajouter le nom du dossier plus "_" devant le nom du fichier dont on aura supprimer "final"

Dans mon script tu remplaces la ligne qui construit le nom du fichier...
Bloc de code:
newnom="$par$lefich"
par
Bloc de code:
newnom="$par"_NOdoublon_Nopointvirgule_trie.txt""

Je précise que la commande pwd, que tu mentionnais, retourne le chemin du dossier dans lequel tu te trouves (après un "cd" par exemple) alors que mon script récupère le dossier contenant le fichier passé en argument.
 
  • J’aime
Réactions: francois_francois
Ben oui ! tu lui passes le dossier en argument !
Il faut lui passer le fichier à renommer, pas le dossier...
 
Si tu veux lui passer le dossier en argument, alors le script devient:
Dans l'exemple ci-dessous mon dossier "montest" qui est sur le bureau content un fichier "final.txt"
Après exécution le fichier est renommé "montest_final.txt"

Bloc de code:
ledos="/Users/xxxxx/Desktop/montest"

fich=`ls $ledos`
par=`basename $ledos`
newnom="$par"_"$fich"

mv $ledos"/"$fich "$ledos"/"$newnom"
 
@zeltron54

Tout d'abord merci de la peine que tu te donne.

Je suis en train de me perdre dans les versions des scripts proposés, du coup si tu es d'accord, on va faire plus simple.
Je (re)décris exactement ce que je souhaite, j'ai été confu, ca n'a fait que conplexifié les choses.

------------------------------------------------

• J'ai un dossier (qui s'appelle test) ou se trouve se trouve un certain nombre de sous-dossiers (dans le cas présent, 35 dossiers.)
• Chacun des 35 sous-dossiers, a un nom différent, mais ont en commun le mot "Pays" dans leur nom.
(exemple : va_Pays_Vatican , mc_Pays_Monaco , dz_Pays_Algérie , etc...)
• chacun de 35 sous-dossiers contient un fichier texte qui a toujours le même nom "final_NOdoublon_Nopointvirgule_trie.txt"

=> Je souhaite que le nom du fichier texte de chaque sous-dossier, soit partiellement renommé avec le nom du dossier qui le contient.

exemple :
Le dossier "va_Pays_Vatican" , contient "final_NOdoublon_Nopointvirgule_trie.txt"
"final_NOdoublon_Nopointvirgule_trie.txt" devient "va_Pays_Vatican_NOdoublon_Nopointvirgule_trie.txt"

Je souhaite que le script renomme les 35 fichiers textes, en une seule passe (que je ne n'ai pas lancer 35 fois le script).

Merci,
 
Dernière édition:
Le script qui renomme donc tous les fichiers de tous les dossiers contenus dans le dossier "test"

Dans mon script la première ligne défini le chemin du dossier "test" à toi de la modifier pour l'adapter au chemin de ton dossier "test".

Bloc de code:
#!/bin/bash

ledossier="/Users/xxxxxxx/Desktop/test"

cd $ledossier

for dir in *
do
dir=${dir%*/}
ledos=$ledossier"/"$dir
fich=`ls "$ledos"`

ancien_nom=$ledos"/"$fich
newnom=$ledos"/"$dir"_"$fich

mv "$ancien_nom" "$newnom"

done
 
  • J’aime
Réactions: francois_francois
Je fais un essai. Je reviens après. merci

Essai effectué,
L'ajout de "xx_Pays_xxxxxx" c'est bon, mais le mot "final" n'est pas supprimé.

xxxxx.png
 
Dernière édition:
Bonsoir,

J'avais complétement zapper ce détail de supprimer "final"
Comme tous les fichiers ont le même nom, c'est plus simple, je te met le nouveau script.

Bloc de code:
#!/bin/bash

ledossier="/Users/xxxxx/Desktop/test"

cd $ledossier

for dir in *
do
dir=${dir%*/}
ledos=$ledossier"/"$dir
fich=`ls "$ledos"`

ancien_nom=$ledos"/"$fich
newnom=$ledos"/"$dir"_NOdoublon_Nopointvirgule_trie.txt"

mv "$ancien_nom" "$newnom"

done
 
Dernière édition par un modérateur: