1 votes

Outil pour trouver des fichiers en double et les lier en tant que hardlinks

Où pourrais-je trouver un petit programme (éventuellement binaire statiquement lié) comme fdupes ou rdfind, pour m'aider à trouver des fichiers dupliqués sur la même partition/montage - en ne vérifiant que les répertoires spécifiés - et les lier en tant que liens physiques ?

Mon architecture : armv8l

root@localhost/storage/emulated/0/TitaniumBackup 2018-08-02,12:12:26# (16) uname -a
Linux localhost 3.10.108-ga044406f3ee #1 SMP PREEMPT Sun Jul 15 02:16:25 CEST 2018 armv8l

Suppose que j'ai déjà un accès root au shell, avec Busybox installé.

Filesystem               1K-blocks     Used Available Use% Mounted on
tmpfs                       944236      500    943736   1% /dev
tmpfs                       944236        0    944236   0% /mnt
/dev/block/mmcblk0p3         16048     2320     13728  15% /efs
/dev/block/mmcblk0p21       197472      428    197044   1% /cache
/dev/block/mmcblk0p23     11588512 11507720     80792 100% /data
/dev/block/mmcblk0p18         8080       92      7988   2% /persdata/absolute
/dev/block/mmcblk0p4          3952      548      3404  14% /cpefs
tmpfs                       944236      452    943784   1% /sbin
/dev/block/mmcblk0p20      3023760  1258796   1764964  42% /sbin/.core/mirror/system
/sbin/.core/block/loop08    157152   110660     46492  71% /sbin/.core/img
tmpfs                       944236        0    944236   0% /system
tmpfs                       944236        0    944236   0% /system/etc/permissions
tmpfs                       944236        0    944236   0% /system/priv-app
tmpfs                       944236        0    944236   0% /system/app
tmpfs                       944236        0    944236   0% /system/app/FaceLock/lib
tmpfs                       944236        0    944236   0% /system/lib
tmpfs                       944236        0    944236   0% /system/framework
tmpfs                       944236        0    944236   0% /system/vendor
/data/media               11588512 11507732     80780 100% /mnt/runtime/default/emulated

0 votes

Je doute qu'il y ait beaucoup de fichiers système en double. Que voulez-vous réaliser - réduire l'image système Android ou libérer plus d'espace sur votre appareil Android?

0 votes

Principalement concerné par des éléments dans / stockage / émulé / 0, loin du système central. Les outils de cloud / sauvegarde tiers non liés se chevauchent trop (Lucky Patcher, SMS B&R, Titanium, etc.) triplant les anciens fichiers apk et les fichiers de données utilisateur historiques non vitaux à l'exploitation. Sauf si on les laisse tranquilles, ils prennent trop d'espace maudit, provoquant des échecs Android régulièrement.

0voto

SSS Points 489

SD Maid peut vous aider à trouver des doublons. Cependant, vous devez acheter la version pro pour débloquer toutes les fonctionnalités (dans le cas des doublons, les supprimer depuis l'application).

0 votes

Beaucoup d'applications peuvent le faire, par exemple it4nextgen.com/duplicate-file-finder-apps-android, dont certaines que j'avais déjà. Merci, mais la question concerne spécifiquement le hardlinking (une application sysadmin ou un programme shell qui trouve et sait où exécuter ln).

0 votes

Mince! Je devrais mieux lire. Je ne connais pas d'application, mais si tu veux tu peux utiliser fdupes et ln en tant que commandes dans termux.

0 votes

Sauf si vous savez mieux, j'ai déjà cherché un binaire fdupes, et je n'ai pas l'intention d'essayer de déployer des éléments essentiels à la compilation ou de le compiler moi-même, pour armv8l. Cependant, je pourrais simplement écrire un script shell pour scanner les tailles de fichier et les sommes de contrôle, puis lier les correspondances, le planifier après que les encombrants aient fini, etc.

0voto

Swoogan Points 1947

Jusqu'à ce qu'un meilleur outil arrive, ce script trouvera et créera des liens durs vers les fichiers en double filtrés par extension, sous les répertoires donnés.

C'est loin d'être idéal, mais d'autres peuvent le personnaliser selon leurs besoins. Comme c'est pratiquement en une seule ligne, je déteste qu'il soit incompréhensiblement concis, mais j'ai dû faire face à quelques obstacles dans un environnement BusyBox plutôt limité.

(cd /data/media/0/; (date; set -x; mount; df; fdupes -nAS1 -o time -r TitaniumBackup SmsContactsBackup; df) |tee fdupes.log |grep "\.apk" |sed 's/[][\\ ()]/?/g' |awk '{system( "ls -l "$0); system("touch -m "$2" -r "$1" && ln -vf "$1" "$2 ) }' 2>&1 |tee duphlinker.log)

  • Le fdupes disponible pour termux ne crée pas de liens durs. Donc je n'utilise que sa sortie pour identifier les fichiers similaires.
  • Commencant sous /data/media/0/ (et non /storage/emulated/0, car dans Android moderne c'est un montage virtuel ne prenant pas en charge les liens de système de fichiers), j'ai choisi de scanner de manière récursive uniquement les répertoires TitaniumBackup et SmsContactsBackup, où je sais que de gros doublons se forment après l'exécution de leurs applications correspondantes.
  • Je filtre tous les fichiers sauf les fichiers .apk.
  • Comme certains chemins de fichiers contenaient des espaces échappés - ce qui est ennuyeux lorsque l'espace blanc est nécessaire en tant que délimiteur non configurable plus tard - avec sed je remplace tous les "\ " par le joker à un seul caractère "?". Cela permet un petit risque de lier des fichiers non assortis, s'ils sont improprement nommés de manière similaire.
  • Dans awk je définis les timestamps de modification sur celui du fichier le plus ancien, puis je force la création du lien dur, libérant de l'espace disque du fichier le plus récent.

Les applications de niveau supérieur ne s'en aperçoivent pas, et se nettoient automatiquement après avoir été téléchargées sur mon cloud finalement (si elles ont de telles fonctionnalités).

Maintenant je vais simplement mettre cela dans crontab pour Magisk, vers 4 heures du matin tous les jours. Cela s'exécute en moins d'une minute.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X