Je suis nul en programmation et guère mieux en Linux.
Je suis toujours à la récupération de mes fichiers effacés par
inadvertance. Ca ne se présente pas aussi bien que ce que j'espérais mais
bon, je continue à chercher.
Photorec ma retrouvé pas mal de fichiers classés maintenant dans une
partition /sauvetage. Il y a 250 fichiers (de recup_dir.1 à recup_dir.250)
contenant chacun environ 500 fichiers qui se présentent sous la forme :
f15042008 à f15892059). Ils ont tous une extension différente (txt, elf. gz,
odt, etc...)
Je voudrais grouper tous les fichiers .txt de tous les répertoires (de 1 à
250) dans un fichier recup.txt unique, et faire de même pour chaque
extension de manière à me faciliter la vie.
J'ai réussi à faire un script bash (recuperation.txt) qui se présente ainsi :
Ce fichier (que j'ai rendu exécutable (chmod +x) se trouve au milieu de tous
les répertoires recup_dirxxx) mais la commande
./recuperation.txt
est absolument inopérante. Et il n'y a aucune indication d'erreur qui puisse
me donner une piste de recherche. Je pense que le système ne peut pas
chercher dans le fichier "recup_dir.*" mais qu'il lui faut un chemin bien
précis et correct pour commencer la recherche.
Je m'en remets à vous pour me dire ce qui ne va pas dans mon script. Ou
alors m'en donner un plus efficace.
Peut être que je devrais le mettre ailleurs ? Changer les droits, de
propriétaire ?
Ce serais plutôt (pas testé la commande et je n'ai pas regardé le man de mv pour le t) :
où /sauvetage/recup est le répertoire racine où il y a tous les fichiers récupérés, il faut que /sauvetage/recup soient différents ( c'est peut-être idiot mais vaut mieux vérifier des choses bêtes surtout avec find ) et que le premier ne soit pas le père du deuxième.
Ce serais plutôt (pas testé la commande et je n'ai pas regardé le man de
mv pour le t) :
où /sauvetage/recup est le répertoire racine où il y a tous les fichiers
récupérés, il faut que /sauvetage/recup soient différents ( c'est
peut-être idiot mais vaut mieux vérifier des choses bêtes surtout avec
find ) et que le premier ne soit pas le père du deuxième.
Ce serais plutôt (pas testé la commande et je n'ai pas regardé le man de mv pour le t) :
où /sauvetage/recup est le répertoire racine où il y a tous les fichiers récupérés, il faut que /sauvetage/recup soient différents ( c'est peut-être idiot mais vaut mieux vérifier des choses bêtes surtout avec find ) et que le premier ne soit pas le père du deuxième.
(il faut mettre un « * » devant « .txt » sinon find cherche un fichier qui s'appelle '.txt' [à la casse près] et ne trouve rien.)
J'ai rajouté « type -f » pour que find se limite à la recherche de fichiers de type standard (pas des dossiers etc).
Bon courage pour la suite.
Oui, effectivement, ça marche mieux car mon répertoire recup.txt est tout de suite (non, il a fallu attendre quelques minutes quand même :-)) plus riche de ...43 084 fichiers !!!
En adaptant cette commande, je pourrais directement rechercher les fichiers qui m'intéressent.
Merci François, c'est bien plus facile que de faire tous les déplacements à la main !
Merci également à Yamo qui m'a donné sensiblement la même commande que toi. Mais comme il dit également... "il se fait tard..."
Merci encore -- Jean-Jacques Gerbaud entre Dauphiné et PACA
Le 04/03/2011 00:06, Francois Lafont a écrit :
Bonjour,
Le 03/03/2011 23:49, Jean-Jacques Gerbaud a écrit :
(il faut mettre un « * » devant « .txt » sinon find cherche un fichier
qui s'appelle '.txt' [à la casse près] et ne trouve rien.)
J'ai rajouté « type -f » pour que find se limite à la recherche de
fichiers de type standard (pas des dossiers etc).
Bon courage pour la suite.
Oui, effectivement, ça marche mieux car mon répertoire recup.txt est tout de
suite (non, il a fallu attendre quelques minutes quand même :-)) plus riche
de ...43 084 fichiers !!!
En adaptant cette commande, je pourrais directement rechercher les fichiers
qui m'intéressent.
Merci François, c'est bien plus facile que de faire tous les déplacements à
la main !
Merci également à Yamo qui m'a donné sensiblement la même commande que toi.
Mais comme il dit également... "il se fait tard..."
Merci encore
--
Jean-Jacques Gerbaud
entre Dauphiné et PACA
(il faut mettre un « * » devant « .txt » sinon find cherche un fichier qui s'appelle '.txt' [à la casse près] et ne trouve rien.)
J'ai rajouté « type -f » pour que find se limite à la recherche de fichiers de type standard (pas des dossiers etc).
Bon courage pour la suite.
Oui, effectivement, ça marche mieux car mon répertoire recup.txt est tout de suite (non, il a fallu attendre quelques minutes quand même :-)) plus riche de ...43 084 fichiers !!!
En adaptant cette commande, je pourrais directement rechercher les fichiers qui m'intéressent.
Merci François, c'est bien plus facile que de faire tous les déplacements à la main !
Merci également à Yamo qui m'a donné sensiblement la même commande que toi. Mais comme il dit également... "il se fait tard..."
Merci encore -- Jean-Jacques Gerbaud entre Dauphiné et PACA
Lucas Levrel
Le 3 mars 2011, Jean-Jacques Gerbaud a écrit :
J'ai réussi à faire un script bash (recuperation.txt) qui se présente ainsi :
Mais pourquoi un script et pas simplement taper la ligne dans le terminal ?
Je m'en remets à vous pour me dire ce qui ne va pas dans mon script. Ou alors m'en donner un plus efficace.
J'ai vu les autres réponses. Si on est sûr qu'il n'y a que des fichiers, mmv est ton ami :
J'ai réussi à faire un script bash (recuperation.txt) qui se présente ainsi :
Mais pourquoi un script et pas simplement taper la ligne dans le terminal ?
C'est plus pratique pour reprendre/corriger/répéter.
Par contre c'est "pourquoi une extension '.txt' pour un shellscript !?" que je me pose. M'enfin, chacun ses goûts.
-- Hugues Hiegel [http://www.hiegel.fr/~hugues/]
Hugues
Ce cher Olivier Miakinen <om+ a posté :
Le 04/03/2011 13:01, Jean-Jacques Gerbaud a écrit :
J'espère que ma réponse va satisfaire tout le monde.
Le 04/03/2011 14:08, Jean-Jacques Gerbaud a écrit :
J'espère que ma réponse va satisfaire tout le monde.
Le 04/03/2011 14:11, Jean-Jacques Gerbaud a écrit :
J'espère que ma réponse va satisfaire tout le monde.
Surtout Hugues, à qui tu as envoyé ta réponse trois fois par courrier en même temps que ces trois articles publiés dans le groupe...
Je n'en ai reçu qu'un seul... :0)
Ma récupération se comporte de 250 fichiers (recup_dir.xxx) comportant chacun 500 fichiers aux extensions diverses et variées (odt, sh, xml, h, a, pl, txt, elf, etc...)
Mon but est de regrouper tous les fichiers ayant la même extension de manière à faire un tri plus fin dans chaque répertoire dont les fichiers auront alors tous la même extension.
Et donc, tu appelles recuperation.txt le script bash censé récupérer les fichiers .txt, recuperation.h celui qui récupère les fichiers .h, recuperation.pl celui pour les .pl, et ainsi de suite ?
Il faut croire. :-) Malheureusement j'ai la flemme de proposer une solution plus propre, s'adaptant à chaque extension de fichier (facilement récupérable avec sed par exemple)..
Le mieux étant clairement avec zsh :
for file in recup_dir.???/**(.) do mkdir recup_ext.$(file:e) cp $file recup_ext.$(file:e)/. done
Le "/." étant ici pour nous assurer qu'on fait bien une copie d'un fichier dans un dossier, des fois que le mkdir merdoie.. ;o)
C'est clair ?
Moi aussi je trouve ça curieux, même s'il est vrai que bash se fiche pas mal du nom des fichiers et de leur extension.
Je vois surtout un autre problème : a-t-on la garantie que les fichiers trouvés dans chacun des dossiers recup_dir.xxx ont un nom *unique* ? Je n'en suis pas certain... Et il va y avoir des données écrasées (surtout avec un mv, et sans backup...) :)
Je ne traite absolument pas ce problème dans mon exemple zsh...
-- Hugues Hiegel [http://www.hiegel.fr/~hugues/]
Ce cher Olivier Miakinen <om+news@miakinen.net> a posté :
Le 04/03/2011 13:01, Jean-Jacques Gerbaud a écrit :
J'espère que ma réponse va satisfaire tout le monde.
Le 04/03/2011 14:08, Jean-Jacques Gerbaud a écrit :
J'espère que ma réponse va satisfaire tout le monde.
Le 04/03/2011 14:11, Jean-Jacques Gerbaud a écrit :
J'espère que ma réponse va satisfaire tout le monde.
Surtout Hugues, à qui tu as envoyé ta réponse trois fois par courrier
en même temps que ces trois articles publiés dans le groupe...
Je n'en ai reçu qu'un seul... :0)
Ma récupération se comporte de 250 fichiers (recup_dir.xxx) comportant
chacun 500 fichiers aux extensions diverses et variées (odt, sh, xml, h, a,
pl, txt, elf, etc...)
Mon but est de regrouper tous les fichiers ayant la même extension de
manière à faire un tri plus fin dans chaque répertoire dont les fichiers
auront alors tous la même extension.
Et donc, tu appelles recuperation.txt le script bash censé récupérer les
fichiers .txt, recuperation.h celui qui récupère les fichiers .h,
recuperation.pl celui pour les .pl, et ainsi de suite ?
Il faut croire. :-)
Malheureusement j'ai la flemme de proposer une solution plus propre,
s'adaptant à chaque extension de fichier (facilement récupérable avec
sed par exemple)..
Le mieux étant clairement avec zsh :
for file in recup_dir.???/**(.)
do
mkdir recup_ext.$(file:e)
cp $file recup_ext.$(file:e)/.
done
Le "/." étant ici pour nous assurer qu'on fait bien une copie d'un
fichier dans un dossier, des fois que le mkdir merdoie.. ;o)
C'est clair ?
Moi aussi je trouve ça curieux, même s'il est vrai que bash se fiche pas
mal du nom des fichiers et de leur extension.
Je vois surtout un autre problème : a-t-on la garantie que les fichiers
trouvés dans chacun des dossiers recup_dir.xxx ont un nom *unique* ?
Je n'en suis pas certain... Et il va y avoir des données écrasées
(surtout avec un mv, et sans backup...) :)
Je ne traite absolument pas ce problème dans mon exemple zsh...
Le 04/03/2011 13:01, Jean-Jacques Gerbaud a écrit :
J'espère que ma réponse va satisfaire tout le monde.
Le 04/03/2011 14:08, Jean-Jacques Gerbaud a écrit :
J'espère que ma réponse va satisfaire tout le monde.
Le 04/03/2011 14:11, Jean-Jacques Gerbaud a écrit :
J'espère que ma réponse va satisfaire tout le monde.
Surtout Hugues, à qui tu as envoyé ta réponse trois fois par courrier en même temps que ces trois articles publiés dans le groupe...
Je n'en ai reçu qu'un seul... :0)
Ma récupération se comporte de 250 fichiers (recup_dir.xxx) comportant chacun 500 fichiers aux extensions diverses et variées (odt, sh, xml, h, a, pl, txt, elf, etc...)
Mon but est de regrouper tous les fichiers ayant la même extension de manière à faire un tri plus fin dans chaque répertoire dont les fichiers auront alors tous la même extension.
Et donc, tu appelles recuperation.txt le script bash censé récupérer les fichiers .txt, recuperation.h celui qui récupère les fichiers .h, recuperation.pl celui pour les .pl, et ainsi de suite ?
Il faut croire. :-) Malheureusement j'ai la flemme de proposer une solution plus propre, s'adaptant à chaque extension de fichier (facilement récupérable avec sed par exemple)..
Le mieux étant clairement avec zsh :
for file in recup_dir.???/**(.) do mkdir recup_ext.$(file:e) cp $file recup_ext.$(file:e)/. done
Le "/." étant ici pour nous assurer qu'on fait bien une copie d'un fichier dans un dossier, des fois que le mkdir merdoie.. ;o)
C'est clair ?
Moi aussi je trouve ça curieux, même s'il est vrai que bash se fiche pas mal du nom des fichiers et de leur extension.
Je vois surtout un autre problème : a-t-on la garantie que les fichiers trouvés dans chacun des dossiers recup_dir.xxx ont un nom *unique* ? Je n'en suis pas certain... Et il va y avoir des données écrasées (surtout avec un mv, et sans backup...) :)
Je ne traite absolument pas ce problème dans mon exemple zsh...
-- Hugues Hiegel [http://www.hiegel.fr/~hugues/]
Benoit Izac
Bonjour,
le 04/03/2011 à 14:31, Hugues a écrit dans le message :
Le mieux étant clairement avec zsh :
for file in recup_dir.???/**(.) do mkdir recup_ext.$(file:e)
mkdir -p sinon ça va couiner sévère. De plus, c'est ${file:e}.
cp $file recup_ext.$(file:e)/. done
Je vois surtout un autre problème : a-t-on la garantie que les fichiers trouvés dans chacun des dossiers recup_dir.xxx ont un nom *unique* ? Je n'en suis pas certain... Et il va y avoir des données écrasées (surtout avec un mv, et sans backup...) :)
Je ne traite absolument pas ce problème dans mon exemple zsh...
i=0 dest="$file" while [ -f "recup_ext.${file:e}/$dest" ]; do i=$(($i + 1)) dest="${file:r}_$i.${file:e}" done cp "$file" "recup_ext.${file:e}/$dest"
Non testé.
-- Benoit Izac
Bonjour,
le 04/03/2011 à 14:31, Hugues <hugues@hiegel.fr> a écrit dans le message
<87vczz810w.fsf@paranoid.sweethome> :
Le mieux étant clairement avec zsh :
for file in recup_dir.???/**(.)
do
mkdir recup_ext.$(file:e)
mkdir -p sinon ça va couiner sévère. De plus, c'est ${file:e}.
cp $file recup_ext.$(file:e)/.
done
Je vois surtout un autre problème : a-t-on la garantie que les fichiers
trouvés dans chacun des dossiers recup_dir.xxx ont un nom *unique* ?
Je n'en suis pas certain... Et il va y avoir des données écrasées
(surtout avec un mv, et sans backup...) :)
Je ne traite absolument pas ce problème dans mon exemple zsh...
i=0
dest="$file"
while [ -f "recup_ext.${file:e}/$dest" ]; do
i=$(($i + 1))
dest="${file:r}_$i.${file:e}"
done
cp "$file" "recup_ext.${file:e}/$dest"
le 04/03/2011 à 14:31, Hugues a écrit dans le message :
Le mieux étant clairement avec zsh :
for file in recup_dir.???/**(.) do mkdir recup_ext.$(file:e)
mkdir -p sinon ça va couiner sévère. De plus, c'est ${file:e}.
cp $file recup_ext.$(file:e)/. done
Je vois surtout un autre problème : a-t-on la garantie que les fichiers trouvés dans chacun des dossiers recup_dir.xxx ont un nom *unique* ? Je n'en suis pas certain... Et il va y avoir des données écrasées (surtout avec un mv, et sans backup...) :)
Je ne traite absolument pas ce problème dans mon exemple zsh...
i=0 dest="$file" while [ -f "recup_ext.${file:e}/$dest" ]; do i=$(($i + 1)) dest="${file:r}_$i.${file:e}" done cp "$file" "recup_ext.${file:e}/$dest"
Non testé.
-- Benoit Izac
Jean-Claude Marques
Lucas Levrel a écrit :
Le 3 mars 2011, Jean-Jacques Gerbaud a écrit :
J'ai réussi à faire un script bash (recuperation.txt) qui se présente ainsi :
Mais pourquoi un script et pas simplement taper la ligne dans le terminal ?
Je m'en remets à vous pour me dire ce qui ne va pas dans mon script. Ou alors m'en donner un plus efficace.
J'ai vu les autres réponses. Si on est sûr qu'il n'y a que des fichiers, mmv est ton ami :