ටීඑල්ඩීආර්:-path <excluded_path> -prune -o
විකල්පය භාවිතා කර ඔබේ මූල නාමාවලි තේරුම් ගෙන එතැන් සිට ඔබේ සෙවුම සකස් කරන්න . /
බැහැර කරන ලද මාර්ගය අවසානයේ පසුපසින් ඇතුළත් නොකරන්න .
උදාහරණයක්:
find / -path /mnt -prune -o -name "*libname-server-2.a*" -print
Effectively ලදායී ලෙස භාවිතා කිරීම සඳහා find
ඔබේ ගොනු පද්ධති නාමාවලි ව්යුහය පිළිබඳ මනා අවබෝධයක් තිබීම අත්යවශ්ය බව මම විශ්වාස කරමි. මගේ නිවසේ පරිගණකයේ මා සතුව බහු-ක්ෂය දෘ hard තැටි ඇත, එම අන්තර්ගතයෙන් අඩක් පමණ උපස්ථ කර ඇත rsnapshot
(එනම්, rsync
). භෞතිකව ස්වාධීන (අනුපිටපත්) ධාවකයකට උපස්ථ වුවද, එය මගේ පද්ධති මූල ( /
) නාමාවලිය යටතේ සවි කර ඇත /mnt/Backups/rsnapshot_backups/
:
/mnt/Backups/
└── rsnapshot_backups/
├── hourly.0/
├── hourly.1/
├── ...
├── daily.0/
├── daily.1/
├── ...
├── weekly.0/
├── weekly.1/
├── ...
├── monthly.0/
├── monthly.1/
└── ...
මෙම /mnt/Backups/rsnapshot_backups/
බහලුම සතුව ~ 60M ගොනු සහ ෆෝල්ඩර සමග, බලෙන් අල්ලාගෙන ~ 2.9 ටී.බී.; සරලවම එම අන්තර්ගතයන් ගමන් කිරීමට කාලය ගතවේ:
## As sudo (#), to avoid numerous "Permission denied" warnings:
time find /mnt/Backups/rsnapshot_backups | wc -l
60314138 ## 60.3M files, folders
34:07.30 ## 34 min
time du /mnt/Backups/rsnapshot_backups -d 0
3112240160 /mnt/Backups/rsnapshot_backups ## 3.1 TB
33:51.88 ## 34 min
time rsnapshot du ## << more accurate re: rsnapshot footprint
2.9T /mnt/Backups/rsnapshot_backups/hourly.0/
4.1G /mnt/Backups/rsnapshot_backups/hourly.1/
...
4.7G /mnt/Backups/rsnapshot_backups/weekly.3/
2.9T total ## 2.9 TB, per sudo rsnapshot du (more accurate)
2:34:54 ## 2 hr 35 min
මේ අනුව, මගේ /
(මූල) කොටසේ ගොනුවක් සෙවීමට අවශ්ය ඕනෑම වේලාවක, මගේ උපස්ථ කොටස හරහා ගමන් කිරීම (හැකි නම් වළක්වා ගන්න) සමඟ කටයුතු කිරීමට මට අවශ්යය.
උදාහරණ
මෙම ත්රෙඩ් එකේ විවිධාකාරයෙන් යෝජනා කර ඇති අය අතර ( සොයා ගැනීමේ නාමාවලිය බැහැර කරන්නේ කෙසේද? විධානය ), පිළිගත් පිළිතුර භාවිතා කරමින් සෙවීම් වඩා වේගවත් බව මට පෙනේ - අවවාද සමඟ.
විසඳුම 1
පද්ධති ගොනුව සොයා ගැනීමට මට අවශ්ය යැයි කියමු libname-server-2.a
, නමුත් මගේ rsnapshot
උපස්ථ හරහා සෙවීමට මට අවශ්ය නැත . පද්ධති ගොනුවක් ඉක්මනින් සොයා ගැනීමට, බැහැර කිරීමේ මාර්ගය භාවිතා කරන්න /mnt
(එනම්, භාවිතා කරන්න /mnt
, නැත /mnt/
, හෝ /mnt/Backups
, හෝ ...):
## As sudo (#), to avoid numerous "Permission denied" warnings:
time find / -path /mnt -prune -o -name "*libname-server-2.a*" -print
/usr/lib/libname-server-2.a
real 0m8.644s ## 8.6 sec <<< NOTE!
user 0m1.669s
sys 0m2.466s
## As regular user (victoria); I also use an alternate timing mechanism, as
## here I am using 2>/dev/null to suppress "Permission denied" warnings:
$ START="$(date +"%s")" && find 2>/dev/null / -path /mnt -prune -o \
-name "*libname-server-2.a*" -print; END="$(date +"%s")"; \
TIME="$((END - START))"; printf 'find command took %s sec\n' "$TIME"
/usr/lib/libname-server-2.a
find command took 3 sec ## ~3 sec <<< NOTE!
... තත්පර කිහිපයකින් එම ගොනුව සොයා ගනී, මේ සඳහා වැඩි කාලයක් ගත වන අතර (සියලුම "බැහැර කරන ලද" නාමාවලි හරහා නැවත බැලීමට පෙනේ):
## As sudo (#), to avoid numerous "Permission denied" warnings:
time find / -path /mnt/ -prune -o -name "*libname-server-2.a*" -print
find: warning: -path /mnt/ will not match anything because it ends with /.
/usr/lib/libname-server-2.a
real 33m10.658s ## 33 min 11 sec (~231-663x slower!)
user 1m43.142s
sys 2m22.666s
## As regular user (victoria); I also use an alternate timing mechanism, as
## here I am using 2>/dev/null to suppress "Permission denied" warnings:
$ START="$(date +"%s")" && find 2>/dev/null / -path /mnt/ -prune -o \
-name "*libname-server-2.a*" -print; END="$(date +"%s")"; \
TIME="$((END - START))"; printf 'find command took %s sec\n' "$TIME"
/usr/lib/libname-server-2.a
find command took 1775 sec ## 29.6 min
විසඳුම 2
මෙම ත්රෙඩ් එකේ ඉදිරිපත් කර ඇති අනෙක් විසඳුම ( SO # 4210042 ) ද දුර්වල ලෙස ක්රියා කරයි:
## As sudo (#), to avoid numerous "Permission denied" warnings:
time find / -name "*libname-server-2.a*" -not -path "/mnt"
/usr/lib/libname-server-2.a
real 33m37.911s ## 33 min 38 sec (~235x slower)
user 1m45.134s
sys 2m31.846s
time find / -name "*libname-server-2.a*" -not -path "/mnt/*"
/usr/lib/libname-server-2.a
real 33m11.208s ## 33 min 11 sec
user 1m22.185s
sys 2m29.962s
සාරාංශය | නිගමන
හි දක්වා ඇති ප්රවේශය භාවිතා කරන්න විසඳුම 1 "
find / -path /mnt -prune -o -name "*libname-server-2.a*" -print
එනම්
... -path <excluded_path> -prune -o ...
/
බැහැර කරන ලද මාර්ගයට ඔබ පසුපසින් එකතු කරන සෑම විටම , find
විධානය නැවත නැවත (සියල්ලටම) ඇතුල් වන බව සඳහන් කරමින්/mnt/*
නාමාවලි - මගේ නඩුවේදී, /mnt/Backups/rsnapshot_backups/*
උප බහලුම් නිසා, සෙවීමට ඩොලර් 2.9 TB ලිපිගොනු ඇතුළත් වේ! පසුපසින් නොපැමිණීමෙන් /
සෙවීම වහාම පාහේ සම්පූර්ණ විය යුතුය (තත්පර කිහිපයකින්).
"විසඳුම 2" (... -not -path <exclude path> ...
) එලෙසම බැහැර කරන ලද නාමාවලි හරහා නැවත නැවත සෙවීම පෙනේ - බැහැර කළ තරග නැවත නොපැමිණීම, නමුත් එම සෙවුම් කාලය අනවශ්ය ලෙස පරිභෝජනය කිරීම.
එම rsnapshot
උපස්ථ තුළ සෙවීම :
මගේ පැයක / දිනපතා / සතිපතා / මාසික rsnapshot
උපස්ථයකින් ගොනුවක් සොයා ගැනීමට ):
$ START="$(date +"%s")" && find 2>/dev/null /mnt/Backups/rsnapshot_backups/daily.0 -name '*04t8ugijrlkj.jpg'; END="$(date +"%s")"; TIME="$((END - START))"; printf 'find command took %s sec\n' "$TIME"
/mnt/Backups/rsnapshot_backups/daily.0/snapshot_root/mnt/Vancouver/temp/04t8ugijrlkj.jpg
find command took 312 sec ## 5.2 minutes: despite apparent rsnapshot size
## (~4 GB), it is in fact searching through ~2.9 TB)
කැදැලි නාමාවලියක් හැර:
මෙන්න, මට කැදැලි නාමාවලිය බැහැර කිරීමට අවශ්යයි, උදා : /mnt/Vancouver/projects/ie/claws/data/*
සිට සෙවීමේදී /mnt/Vancouver/projects/
:
$ time find . -iname '*test_file*'
./ie/claws/data/test_file
./ie/claws/test_file
0:01.97
$ time find . -path '*/data' -prune -o -iname '*test_file*' -print
./ie/claws/test_file
0:00.07
පසෙකින්:-print
විධානය අවසානයේ එකතු කිරීම බැහැර කළ නාමාවලිය මුද්රණය කිරීම යටපත් කරයි:
$ find / -path /mnt -prune -o -name "*libname-server-2.a*"
/mnt
/usr/lib/libname-server-2.a
$ find / -path /mnt -prune -o -name "*libname-server-2.a*" -print
/usr/lib/libname-server-2.a