Mặc dù find
lệnh là cách đơn giản nhất để duyệt qua đệ quy cây thư mục, có một số cách khác và đặc biệt là hai ngôn ngữ kịch bản đi kèm với Ubuntu theo mặc định đã có khả năng thực hiện điều đó.
bash
bash
có một globstar
tùy chọn shell rất đẹp , cho phép duyệt qua đệ quy của cây thư mục. Tất cả những gì chúng ta cần làm là kiểm tra xem mục trong bản ./**/*
mở rộng có phải là một tệp hay không và liệu nó có chứa văn bản mong muốn hay không:
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 có mô-đun Find, cho phép thực hiện duyệt qua đệ quy của cây thư mục và thông qua chương trình con thực hiện hành động cụ thể trên chúng. Với một tập lệnh nhỏ, bạn có thể duyệt qua cây thư mục, đẩy các tệp có chứa chuỗi mong muốn thành mảng và sau đó in nó như sau:
#!/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"
}
Và cách thức hoạt động:
$ ./find_file.pl "postgis-2.0.0"
./testdir/texts/postgis-2.0.0
Con trăn
Python là một ngôn ngữ kịch bản khác được sử dụng rất rộng rãi trong thế giới Ubuntu. Đặc biệt, nó có os.walk()
mô-đun cho phép chúng ta thực hiện hành động tương tự như trên - cây thư mục traverse và lấy danh sách các tệp chứa chuỗi mong muốn.
Như một lớp lót, điều này có thể được thực hiện như vậy:
$ 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']
Kịch bản đầy đủ sẽ trông như vậy:
#!/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
lệnh là tốt, chỉ cần cập nhật các locatedb đầu tiên, sử dụng lệnhupdatedb