Ако си решил да си развиваш знанията - това го разбирам и не чети надолу
![Smiley :)](https://www.linux-bg.org/forum/Smileys/default/smiley.gif)
Ако пък ли искаш решение - програмата, която цитирах я ползвам и пак казвам е добро решение.
За да ти дам база за сравнение я пуснах на домашния сървър да ти събера няколко аутпута. Партишъна, който съм сканирал е мой такъв заделен именно за бекъпи. Става въпрос за обикновен евтин хард на 7200 оборота.
Когато имам време ще ти пусна и от ссд.големина на файловете:
# du -sh /storage/
411G /storage/
брой файлове в дяла:
# find /storage -type f | wc -l
56363
време отнело на програмата да завърши:
# time fdupes -r /storage/
real 6m30.874s
намерени дубликати (всъщност брой редове, но ако разделиш цифрата на 3 или 4 ще получиш относително и файловете
):
# fdupes -r /storage/ | wc -l
13144
През целия процес процесора почти не е мърдал. Както каза колегата по горе, харда при тези неща е ботълнека и няма смисъл от нишки и тнт (по-голям оувърхед).
Не искам да те обезкуражавам по никакъв начин, просто се опитвам да помогна.
Успех.
ПП: Имаше един лаф: Какво ще правим след това с героите..
Та и при сравнението е така. Ще се чудиш какво да правиш с толкова много еднакви файлове (бил съм там
![Smiley :)](https://www.linux-bg.org/forum/Smileys/default/smiley.gif)
)
По горе спомена, че имаш сайтове. Ако са и еднакви ЦиЕМеси там аутпута ще е страшен. Може да помислиш върху пропускане на тези директории.
ПП2: При огромни задания, каквото изглежда твоето, оптимизацията на скрипт има лимит. След това следва оптимизиране на процеса, като ръчно (или не) го орязваш според това, което искаш да постигнеш.
edit 1: Обещаните изходи от SSD
размер:
$ sudo du -sh /home/
321G /home/
реален размер:
$ df -h
Filesystem Size Used Avail Use% Mounted on
/home/user/.Private 227G 176G 40G 82% /home/user
намерени дубликати (всъщност брой редове, но ако разделиш цифрата на 3 или 4 ще получиш относително и файловете
):
$ fdupes -r /home/ | wc -l
97594
време отнело на програмата да завърши:
$ time fdupes -r /home/
real 4m26.771s
Тук едното ядро се натовари (~80%) понеже работим с ссд. Както се вижда имаме много повече файлове (както за сканиране, така и като резултат), но по-малко като общ размер и времето е с около 30% по-малко.
Като извод може да се каже, че единствено зависиш от броя файлове, а не от тяхната големина. Та както вече казах, помисли върху пропускане на някой директории или ги измести от пътя за сканиране.
edit 2: Исках да сравня и скрипта ти (втората версия) с програмата, но като гледам нямам шанс да го подкарам. Инсталирах питон3.6 , но явно има доста други неща. Като за начало
срещне ли счупен симлинк и спира, тръгнах да сканирам друга /home папка на друга машина, но зацикли нещо (буквално спря да прави каквото и да е) и когато му набих ctrl+c извади това:
# time python3.6 asd.py /home/
Traceback (most recent call last):
File "asd.py", line 81, in <module>
size = os.stat(full_name).st_size
FileNotFoundError: [Errno 2] No such file or directory: '/home/user/.local/share/Steam/ubuntu12_32/steam-runtime/i386/usr/share/doc/libstdc++6'
Error in sys.excepthook:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 63, in apport_excepthook
from apport.fileutils import likely_packaged, get_recent_crashes
File "/usr/lib/python3/dist-packages/apport/__init__.py", line 5, in <module>
from apport.report import Report
File "/usr/lib/python3/dist-packages/apport/report.py", line 30, in <module>
import apport.fileutils
File "/usr/lib/python3/dist-packages/apport/fileutils.py", line 23, in <module>
from apport.packaging_impl import impl as packaging
File "/usr/lib/python3/dist-packages/apport/packaging_impl.py", line 23, in <module>
import apt
File "/usr/lib/python3/dist-packages/apt/__init__.py", line 23, in <module>
import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'
Original exception was:
Traceback (most recent call last):
File "asd.py", line 81, in <module>
size = os.stat(full_name).st_size
FileNotFoundError: [Errno 2] No such file or directory: '/home/user/.local/share/Steam/ubuntu12_32/steam-runtime/i386/usr/share/doc/libstdc++6'
Знам, че го играя малко QA, но понеже с друго не мога, помагам с това