Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

déplacer des fichiers

13 réponses
Avatar
Jean-Jacques Gerbaud
Bonjour,

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 :

find /sauvetage/recup* -iname ".txt" -exec mv -t /sauvetage/recup.txt '{}' \;

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 ?

Je vous remercie d'avance de vos conseils


--
Jean-Jacques Gerbaud
entre Dauphiné et PACA

3 réponses

1 2
Avatar
Benoit Izac
Bonjour,

le 04/03/2011 à 19:30, Jean-Claude Marques a écrit dans le message
<4d712fb2$0$7694$ :

#!/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



find $Source -type f -iname "*.$Ext"
-exec cp {} $Destination/Rep.$Ext/ +

devrait aller un peu plus vite (évite un fork/cp pour chaque fichier).

-ls 2>&1 >$Destination/log.$Ext
devrait plutôt s'écrire :
-ls >$Destination/log.$Ext 2>&1

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
Avatar
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/]
Avatar
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/]
1 2