Connexion

Forum

Logiciels » Autres logiciels tri de données photorec

dao Membre non connecté

Rang

Avatar

Inscrit le : 14/10/2013 à 12h09

Localisation : val de marne

Messages: 140

Le 27/11/2019 à 11h02
J'ai procédé à une grosse récupération de données sur une partition, je dois les trier car elle comporte plus de 700 dossiers de type recup_dir.
J'ai commencer à tenter l'extraction ciblée des fichiers qui m'intéressent par catégorie, en l'occurence de .jpg avec la commande (en root ou user)

mv /home/ouam/recup_dir.*/*.jpg /home/ouam/recupnovembre2019Photorec/jpg/
bash: /usr/bin/mv: Liste d'arguments trop longue

ensuite

> find /home/ouam/recup_dir.*/* -type f -name .jpg -exec cp {} /home/ouam/recupnovembre2019Photorec/jpg/. \;
bash: /home/ouam/recup_dir.100/f93181624.ini: Permission non accordée

ensuite

sudo chmod -R 755 /home/ouam/recup_dir.100

re

> find /home/ouam/recup_dir.*/* -type f -name .jpg -exec cp {} /home/ouam/recupnovembre2019Photorec/jpg/. \;
bash: /home/ouam/recup_dir.100/f93181624.ini: Liste d'arguments trop longue
jje ne connais pas la limite du nombre d'arguments si cela constitue une piste possible, le spécifier dans la commande,
je ne vois pas trop comment m'en sortir,
   
Jybz Membre non connecté

Rang

Avatar

Modérateur

Inscrit le : 10/10/2018 à 10h26

Messages: 1934

Le 27/11/2019 à 15h37
Tu as le truc, c'est de faire une liste des fichiers dans un texte, puis de faire le mv pour chaque ligne du texte.

par exemple :
Code BASH :
du -aLb | sed -e 's/^[[:digit:]]*[[:space:]]*//' | grep -e '.jpg$' >~/liste.jpg.txt

ensuite, tu peux faire :
Code BASH :
for i in ~/liste.jpg.txt ; do mv ${i} ~/destination/ ; done


Ou encore, grosse combinaison :

Code BASH :
for i in $(du -alb | sed -e 's/[[:digit:]]*[[:space:]]*//' | grep -e '.jpg$') ; do mv ${i} ~/destination/ ; done


Explication :
du (Disk Usage) affiche tous les fichiers ainsi que les fichiers des sous dossiers (-a), sans prendre en compte les liens symboliques (-L) et en affichant la taille des fichiers en octet plutot que l'affichage "humain" (36Mo au lieu de 35234233 octets).
Cette liste qu'il nous donne, on supprime l'indésirable des lignes (la taille, l'espace entre la taille et le nom du fichier) avec sed.
sed prends des scripts en argument, et procèdera ligne par ligne. 's' est une commande pour remplacer, 'commande/motif à remplacer/remplaçant/arguments' → 's/motif/vide/pas d'arguments' → 's/motif//'. Notre motif, c'est en début de ligne (^) qui commence avec un nombre indéfini (*) de chiffre (classe de caractère [:digit:]), et un nombre indéfini (*) d'espace (tabulation, espace, etc) avec la classe [:space:]. Mais il faut que ce soit dans l'ordre chiffre, espace. Par exemple, [[:digit:][:space:]]* en un seul groupe au lieu de deux groupes distinct, viendrait supprimer aussi tous les numéros préfixant les noms de fichiers.
Puis, on n'affiche que ce qui se termine ($) par .jpg.

Ainsi, on a cette liste qui est utilisé par notre boucle for, la structure for est "for variable in liste; do commande; commande; commande; [...] done"
'i' prendra la valeur de chacune des lignes de la liste.
Puis mv fait le travail...

C'est clair ?
   
Jybz Membre non connecté

Rang

Avatar

Modérateur

Inscrit le : 10/10/2018 à 10h26

Messages: 1934

Le 27/11/2019 à 15h38
Presque exemple : (presque car je ne fais pas de déplacement, juste afficher ce que serait la commande)
Code BASH :
[jybz@localhost Android_Internals]$ for i in $(du -alb | sed -e 's/[[:digit:]]*[[:space:]]*//' | grep -e '.pdf$') ; do echo mv ${i} ~/destination/ ; done
mv ./pass4-nup.pdf /home/jybz/destination/
mv ./pass4-n.pdf /home/jybz/destination/
mv ./pass5_P1.pdf /home/jybz/destination/
mv ./out.pdf /home/jybz/destination/
mv ./pass5_test.pdf /home/jybz/destination/
mv ./pass4.pdf /home/jybz/destination/
mv ./pass1.pdf /home/jybz/destination/
mv ./pass5.pdf /home/jybz/destination/
mv ./pass3.pdf /home/jybz/destination/
mv ./pass2.pdf /home/jybz/destination/
mv ./pass5_P2.pdf /home/jybz/destination/
 
   
dao Membre non connecté

Rang

Avatar

Inscrit le : 14/10/2013 à 12h09

Localisation : val de marne

Messages: 140

Le 28/11/2019 à 11h41
un peu compliqué pour moi dès cette première commande
du -aLb | sed -e 's/^[[:digit:]]*[[:space:]]*//' | grep -e '.jpg$' >~/liste.jpg.txt

comment je l'applique, sachant que ma demande de déplacements de fichiers , par exemple des .jpg , concerne 784 dossiers recup_dir

de
/home/ouam/recup_dir.781 à /home/ouam/recup_dir.784

vers
/home/ouam/recupnovembre2019Photorec/jpg/
   
Jybz Membre non connecté

Rang

Avatar

Modérateur

Inscrit le : 10/10/2018 à 10h26

Messages: 1934

Le 28/11/2019 à 13h50
Ah oh !
Tous tes dossiers recup_dir sont dans /home/ouam/ directement ?
hum...
Que dit la commande :
Code TEXT :
mv ~/recup_dir.1* ~/global/

Si elle ne crie pas, tu peux faire les suivante pour déplacer tous les dossiers recup_dir.truc dans un seul dossier.
Code TEXT :
mv ~/recup_dir.2* ~/global/
mv ~/recup_dir.3* ~/global/
mv ~/recup_dir.4* ~/global/
mv ~/recup_dir.5* ~/global/
mv ~/recup_dir.6* ~/global/
mv ~/recup_dir.7* ~/global/
mv ~/recup_dir.8* ~/global/
mv ~/recup_dir.9* ~/global/

Effectivement, c'est important de le faire depuis un dossier avec "rien d'autre", sinon ça déplacera TOUT même ce qu'on ne souhaite pas déplacer.
   
dao Membre non connecté

Rang

Avatar

Inscrit le : 14/10/2013 à 12h09

Localisation : val de marne

Messages: 140

Le 28/11/2019 à 16h56
tous les dossier recup_dir. sont bien dans /home/ouam/
à chaque fois j'indique le dossier à photorec pour la destination, en l'occurence
/home/ouam/recupinitialephotorec
que j'avais créé pour être un peu ordonné, mais photorec n'en tient pas commpte
Voici le retour de commande
# mv ~/recup_dir.1* ~/global/
mv: impossible d'évaluer '/root/recup_dir.1*': Aucun fichier ou dossier de ce type

Si je connaissais la limite de commande de mv, tenterais le transfert par lot de dossiers, mais je ne sais pas comment argumenter la commande pour que soit traité par exemple les dossiers 1 à 50 par exemple, (car j'en ai beaucoup)
dans une commande comme celle ci, si elle est correcte

mv /home/ouam/recup_dir.*/*.jpg /home/ouam/recupnovembre2019Photorec/jpg/
   
Jybz Membre non connecté

Rang

Avatar

Modérateur

Inscrit le : 10/10/2018 à 10h26

Messages: 1934

Le 28/11/2019 à 17h12
Peux tu tester ça ?
Code BASH :
for i in $(du -alb | sed -e 's/[[:digit:]]*[[:space:]]*//' | grep -e 'recup_dir') ; do echo mv ${i} ~/recupinitialephotorec/ ; done
   
dao Membre non connecté

Rang

Avatar

Inscrit le : 14/10/2013 à 12h09

Localisation : val de marne

Messages: 140

Le 28/11/2019 à 17h57

for i in $(du -alb | sed -e 's/[[:digit:]]*[[:space:]]*//' | grep -e 'recup_dir') ; do echo mv ${i} ~/recupinitialephotorec/ ; done

rien n'a bougé et je n'arrive pas avec shift + page up à remonter jusqu'à la commande pour voir si tous les dossiers recup_dir ont été listés
   
dao Membre non connecté

Rang

Avatar

Inscrit le : 14/10/2013 à 12h09

Localisation : val de marne

Messages: 140

Le 29/11/2019 à 09h22
ma question pour avancer comment modifier cette commande
mv /home/ouam/recup_dir.*/*.jpg /home/ouam/recupnovembre2019Photorec/jpg/

pour traiter un lot de dossier par exemple de recup-dir.1 à recup_dir.50
   
Jybz Membre non connecté

Rang

Avatar

Modérateur

Inscrit le : 10/10/2018 à 10h26

Messages: 1934

Le 29/11/2019 à 12h43
Ah rien n'a bougé ? Pas de message d'erreur ?

Ah il manque un -d 1 pour la commande du je pense.

Mais je n'ose pas continuer, c'est dangereux de travailler comme ça dans le dossier de l'utilisateur.
   
dao Membre non connecté

Rang

Avatar

Inscrit le : 14/10/2013 à 12h09

Localisation : val de marne

Messages: 140

Le 29/11/2019 à 23h03
ok, sinon comment je pourrais adapter cette commande

mv /home/ouam/recup_dir.*/*.jpg /home/ouam/recupnovembre2019Photorec/jpg/

a un nombre de dossiers limité pour contourner cette limitation de Liste d'arguments trop longue
   
Jybz Membre non connecté

Rang

Avatar

Modérateur

Inscrit le : 10/10/2018 à 10h26

Messages: 1934

Le 30/11/2019 à 10h18
Pour contourner, il faut faire une boucle qui lancera la commande avec un seul dossier.

Fais cette commande, elle est non destructive, et donne nous le contenu du fichier liste.txt du dossier utilisateur :
Code TEXT :
du -alb | sed -e 's/[[:digit:]]*[[:space:]]*//' | grep -e 'recup_dir' >~/liste.txt

Edité par Jybz Le 30/11/2019 à 10h18
   
dao Membre non connecté

Rang

Avatar

Inscrit le : 14/10/2013 à 12h09

Localisation : val de marne

Messages: 140

Le 30/11/2019 à 10h43
d'après l'éditeur de texte il y a 402593 fichiers de différents types
   
Jybz Membre non connecté

Rang

Avatar

Modérateur

Inscrit le : 10/10/2018 à 10h26

Messages: 1934

Le 30/11/2019 à 16h15
Ok, comme tu ne nous montres pas, confirmes tu qu'il ne sagit QUE des fichiers de recup_dir et AUCUN AUTRE fichier du dossier home ?
Code TEXT :
 
sed -e '/jpg$/!d' ~/liste.txt >~/liste.jpg.txt
Edité par Jybz Le 30/11/2019 à 18h31
   
dao Membre non connecté

Rang

Avatar

Inscrit le : 14/10/2013 à 12h09

Localisation : val de marne

Messages: 140

Le 30/11/2019 à 16h55
sed -e 's/jpg$/!d' ~/liste.txt >~/liste.jpg.txt
sed: -e expression n°1, caractère 9: commande « s » inachevée

oui tout fait il n'y a que des fichiers recup_dir, la sortie de la commande dans liste.txt est trop longue pour que je la porte ici 402593 lignes relatives au contyenu des 784 fichiers recup_dir
   
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie