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 ?
le premier envoie dans "$Destination/log.$Ext" la sortie standard de find et la sortie d'erreur sur la sortie standard du terminal, le second envoie la sortie standard et la sortie d'erreur de find dans "$Destination/log.$Ext".
-- Benoit Izac
Bonjour,
le 04/03/2011 à 19:30, Jean-Claude Marques a écrit dans le message
<4d712fb2$0$7694$ba4acef3@reader.news.orange.fr> :
#!/bin/sh
Extensions="tex log" #mettre les extensions ici (sans le point)
Source=$HOME/Latex/articles #le répertoire source (/sauvetage/
Destination="$HOME/COPIES/" #Là où seront stockés les fichiers : je
#proposerais /sauvetage/COPIES ...
for Ext in $Extensions; do
rm -rf $Destination/Rep.$Ext/
mkdir $Destination/Rep.$Ext/
find $Source -type f -iname "*.$Ext" -print
# find $Source -type f -iname "*.$Ext" -exec cp -p {}
$Destination/Rep.$Ext/ ; -ls 2>&1 >$Destination/log.$Ext
done
le premier envoie dans "$Destination/log.$Ext" la sortie standard de
find et la sortie d'erreur sur la sortie standard du terminal, le second
envoie la sortie standard et la sortie d'erreur de find dans
"$Destination/log.$Ext".
le premier envoie dans "$Destination/log.$Ext" la sortie standard de find et la sortie d'erreur sur la sortie standard du terminal, le second envoie la sortie standard et la sortie d'erreur de find dans "$Destination/log.$Ext".
-- Benoit Izac
Hugues
Ce cher Benoit Izac a posté :
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.
Ça dépend. donc je ne l'ai pas mis. :)
De plus, c'est ${file:e}.
Oops, merci d'avoir corrigé la bourde.
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é.
Why not. Et autant carrément se passer du ${file:r}... OSEF, à ce niveau-là, sinon j'aurais plutôt récupéré le "xxx" dans recup_dir.xxx, afin de l'utiliser comme base du nom de fichier (tant qu'à vouloir retrouver son origine..)
-- Hugues Hiegel [http://www.hiegel.fr/~hugues/]
Ce cher Benoit Izac <use.reply.to@INVALID.ADDRESS> a posté :
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.
Ça dépend. donc je ne l'ai pas mis. :)
De plus, c'est ${file:e}.
Oops, merci d'avoir corrigé la bourde.
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é.
Why not.
Et autant carrément se passer du ${file:r}... OSEF, à ce niveau-là,
sinon j'aurais plutôt récupéré le "xxx" dans recup_dir.xxx, afin de
l'utiliser comme base du nom de fichier (tant qu'à vouloir retrouver son origine..)
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.
Ça dépend. donc je ne l'ai pas mis. :)
De plus, c'est ${file:e}.
Oops, merci d'avoir corrigé la bourde.
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é.
Why not. Et autant carrément se passer du ${file:r}... OSEF, à ce niveau-là, sinon j'aurais plutôt récupéré le "xxx" dans recup_dir.xxx, afin de l'utiliser comme base du nom de fichier (tant qu'à vouloir retrouver son origine..)
-- Hugues Hiegel [http://www.hiegel.fr/~hugues/]
Hugues
Ce cher Jean-Claude Marques a posté :
Mes 2 cents : plutôt qu'un mv, faire un cp, à condition d'avoir suffisamment d'espace disque, bien sûr.
Mes 42 cents, autant utiliser un symlink plutôt qu'une copie.
;)
-- Hugues Hiegel [http://www.hiegel.fr/~hugues/]
Ce cher Jean-Claude Marques <marques@lagep.univ-lyon1.fr> a posté :
Mes 2 cents : plutôt qu'un mv, faire un cp, à condition d'avoir
suffisamment d'espace disque, bien sûr.
Mes 42 cents, autant utiliser un symlink plutôt qu'une copie.