ในขณะที่find
คำสั่งเป็นวิธีที่ง่ายที่สุดในการสำรวจทรีไดเรกทอรีซ้ำมีวิธีอื่นและโดยเฉพาะอย่างยิ่งภาษาสคริปต์สองภาษาที่มาพร้อมกับ Ubuntu โดยค่าเริ่มต้นแล้วมีความสามารถในการทำเช่นนั้น
ทุบตี
bash
มีglobstar
ตัวเลือกเชลล์ที่ดีมากซึ่งอนุญาตให้ใช้การท่องวนซ้ำของแผนผังไดเรกทอรี สิ่งที่เราต้องทำคือการทดสอบว่ารายการในการ./**/*
ขยายตัวเป็นไฟล์และไม่ว่าจะมีข้อความที่ต้องการ:
bash-4.3$ for f in ./**/* ;do [ -f "$f" ] && [[ "$f" =~ "postgis-2.0.0" ]] && echo "$f"; done
./testdir/texts/postgis-2.0.0
Perl
Perl มีโมดูล Find ซึ่งอนุญาตให้ทำการสำรวจเส้นทางแบบทรีของไดเร็กตอรีทรีและผ่านรูทีนย่อยดำเนินการเฉพาะกับมัน ด้วยสคริปต์ขนาดเล็กคุณสามารถสำรวจแผนผังไดเรกทอรีกดไฟล์ที่มีสตริงที่ต้องการลงในอาร์เรย์แล้วพิมพ์ได้ดังนี้
#!/usr/bin/env perl
use strict;
use warnings;
use File::Find;
my @wanted_files;
find(
sub{
-f $_ && $_ =~ $ARGV[0]
&& push @wanted_files,$File::Find::name
}, "."
);
foreach(@wanted_files){
print "$_\n"
}
และมันทำงานอย่างไร:
$ ./find_file.pl "postgis-2.0.0"
./testdir/texts/postgis-2.0.0
หลาม
Python เป็นภาษาสคริปต์อีกภาษาหนึ่งที่ใช้กันอย่างแพร่หลายในโลกของ Ubuntu โดยเฉพาะอย่างยิ่งมันมีos.walk()
โมดูลที่ช่วยให้เราสามารถดำเนินการเช่นเดียวกับข้างต้น - ทรีไดเรกทอรีทราเวิร์และรับรายการของไฟล์ที่มีสตริงที่ต้องการ
ในฐานะที่เป็นหนึ่งซับนี้สามารถทำได้ดังนี้:
$ python -c 'import os;print([os.path.join(r,i) for r,s,f in os.walk(".") for i in f if "postgis-2.0.0" in i])'
['./testdir/texts/postgis-2.0.0']
สคริปต์แบบเต็มจะมีลักษณะดังนี้:
#!/usr/bin/env python
import os;
for r,s,f in os.walk("."):
for i in f:
if "postgis-2.0.0" in i:
print(os.path.join(r,i))
locate
คำสั่งเป็นได้เพียงแค่การปรับปรุง locatedb ครั้งแรกโดยใช้คำสั่งupdatedb