ფაილების ძებნა — find¶
მიზანი
ისწავლი ათასობით ფაილს შორის იმის მოძებნას, რაც გჭირდება — სახელით, ზომით, თარიღით — და ნაპოვნზე ბრძანების პირდაპირ გაშვებას.
წინაპირობა: 01 — ბრძანების ველი · დრო: ~40 წუთი
პრობლემა¶
გაქვს საქაღალდე 1 200 ორთოფოტოთი. გჭირდება მხოლოდ 2024 წლისები, სხვა საქაღალდეში. Windows-ის Explorer-ში ძებნას დაიწყებ, დაელოდები, მერე Ctrl აჭერილი ხელით მონიშნავ 300 ფაილს და ერთი ცდომილი დაწკაპუნება ყველაფერს გააუქმებს.
ლინუქსში ეს ერთი ხაზია. და რაც მთავარია — ის ხაზი შეგიძლია შეინახო და ხვალ ხელახლა გაუშვა 2025 წლის მონაცემებზე.
ცნება¶
find არ არის „ძებნის ველი". ის არის ფაილების გადამამუშავებელი მილსადენი.
ლოგიკა სამნაწილიანია და ყოველთვის ამ თანმიმდევრობითაა:
| ნაწილი | როლი |
|---|---|
/data/ortho |
სად ვეძებოთ |
-name "*.tif" |
რა კრიტერიუმით |
-exec gdalinfo {} \; |
რა ვუყოთ ნაპოვნს |
ყველაზე ხშირი შეცდომა დამწყებთათვის
find რეკურსიულია ნაგულისხმევად — ის შედის ყველა ქვესაქაღალდეში.
find / მთელ სისტემას სკანირებს და წუთებს გაგრძელდება. ყოველთვის დაიწყე
კონკრეტული საქაღალდიდან, არა /-დან.
ბრძანებები¶
სად ვეძებოთ¶
find . # მიმდინარე საქაღალდე და ყველა ქვესაქაღალდე
find /data/ortho # კონკრეტული ბილიკი
find . -maxdepth 1 # მხოლოდ მიმდინარე, ქვესაქაღალდეებში არ ჩავიდე
კრიტერიუმები¶
| კრიტერიუმი | მნიშვნელობა | მაგალითი |
|---|---|---|
-name |
სახელი (რეგისტრზე მგრძნობიარე) | -name "*.shp" |
-iname |
სახელი (რეგისტრის იგნორით) | -iname "*.TIF" |
-type f |
მხოლოდ ფაილები | |
-type d |
მხოლოდ საქაღალდეები | |
-size +100M |
100 მბ-ზე დიდი | + მეტი, - ნაკლები |
-mtime -7 |
ბოლო 7 დღეში შეცვლილი | |
-empty |
ცარიელი |
ბრჭყალები სავალდებულოა
find . -name *.tif არ იმუშავებს სწორად. ვარსკვლავს shell გახსნის, სანამ
find-ს მისცემს. ყოველთვის დაწერე -name "*.tif" — ბრჭყალებში.
კრიტერიუმების შეერთება¶
# 100 მბ-ზე დიდი TIF ფაილები — ორივე პირობა ერთდროულად (AND ნაგულისხმევია)
find /data -name "*.tif" -size +100M
# TIF ან TIFF (OR)
find /data \( -name "*.tif" -o -name "*.tiff" \)
# ყველაფერი გარდა TIF-ისა
find /data ! -name "*.tif"
რა ვუყოთ ნაპოვნს¶
find . -name "*.tif" -print # დაბეჭდე ბილიკი (ნაგულისხმევი)
find . -name "*.tif" -delete # წაშალე ⚠️
find . -name "*.tif" -exec ls -lh {} \; # გაუშვი ბრძანება თითოეულზე
-exec-ში {} არის „ნაპოვნი ფაილის ბილიკი", ხოლო \; ნიშნავს ბრძანების დასასრულს.
ჯერ ნახე, მერე გააკეთე
-delete და -exec შეუქცევადია. ყოველთვის ჯერ უბრალო find-ით ნახე სია:
GIS მაგალითი¶
1 200 ორთოფოტოდან 2024 წლისების გამოცალკევება
დისკი გაივსო — ვინ ჭამს ადგილს?
# 500 მბ-ზე დიდი ფაილები, ზომის მიხედვით დალაგებული
find /data -type f -size +500M -exec du -h {} + | sort -rh | head -20
გეოგრაფის დისკს ჩვეულებრივ ორი რამ ავსებს: არაშეკუმშული GeoTIFF-ები და QGIS-ის დროებითი ფაილები. ეს ბრძანება ორივეს პოულობს.
სერიული გადაპროექტება GDAL-ით
# ყველა shapefile WGS84-ში → UTM 38N
find /data/vector -name "*.shp" -exec ogr2ogr -t_srs EPSG:32638 \
/data/vector_utm/{} {} \;
აი, სწორედ აქ ჩანს განსხვავება. QGIS-ში ამას 40 ფაილზე ერთი საათი დასჭირდება დაწკაპუნებით. აქ — ერთი ბრძანება, რომელიც შენახვადია და გამეორებადი.
მიტოვებული .shp-ის თანმხლები ფაილების პოვნა
Shapefile რეალურად 4–7 ფაილია. ხშირად .shp წაშლილია, .dbf და .shx კი დარჩა:
ეს უკვე 09 — სკრიპტირების წინასწარი ჩვენებაა.
სავარჯიშო¶
1. სავარჯიშო მონაცემები
შექმენი სატესტო სტრუქტურა:
2. იპოვე
- ყველა
.tifფაილი (მხოლოდ ფაილები, არა საქაღალდეები) - ყველა
.tifდა.TIF— ერთი ბრძანებით - მხოლოდ ის ფაილები, რომელთა სახელში წერია
rustavi - ყველაფერი, რაც არ არის
.tif - მხოლოდ საქაღალდეები
3. იმოქმედე
გადაიტანე ყველა 2024 წლის ფაილი (რეგისტრის იგნორით!) ახალ საქაღალდე
~/lab/ortho_2024/-ში. ჯერ -print-ით შეამოწმე, მერე -exec.
პასუხები
# 2
find . -name "*.tif" -type f
find . \( -iname "*.tif" \) # -iname ორივეს იჭერს
find . -name "*rustavi*"
find . -type f ! -name "*.tif"
find . -type d
# 3
mkdir -p ~/lab/ortho_2024
find . -iname "*_2024_*" -type f -print # ჯერ ნახე
find . -iname "*_2024_*" -type f -exec mv {} ~/lab/ortho_2024/ \;
შენიშნე?
მე-2 დავალებაში -iname "*.tif" უფრო მარტივია, ვიდრე
\( -name "*.tif" -o -name "*.TIF" \). ლინუქსში თითქმის ყოველთვის
არსებობს მოკლე გზა — მაგრამ -o მაინც უნდა იცოდე, რადგან
განსხვავებული კრიტერიუმების შეერთებისას სხვა გამოსავალი არაა.
გასამახსოვრებელი¶
- ბრჭყალები
-name-ზე — ყოველთვის - ჯერ
-print, მერე-delete/-exec /-დან ძებნა ნელია — დაიწყე კონკრეტული საქაღალდიდან-inameრეგისტრს იგნორირებს,-nameარა
დაკავშირებული¶
grep— ტექსტის ძებნა ფაილების შიგნითlocate— სწრაფი ძებნა ინდექსით- 09 — სერიული დამუშავება სკრიპტებით
- GDAL — ბრძანებების ოფიციალური დოკუმენტაცია
სასერტიფიკატო შესაბამისობა
LPIC-1: 103.3 (ფაილების საბაზისო მართვა, წონა 4) · 104.7 (სისტემური ფაილების ძებნა, წონა 2) RHCSA: საბაზისო ინსტრუმენტები
სრული მატრიცა — სასერტიფიკატო ამოცანები