bash
Sử dụng globstar
tùy chọn shell, chúng ta có thể sử dụng tính năng đệ quy./**/*
bash-4.3$ shopt -s globstar
bash-4.3$ for i in ./**/*.xml; do printf "%s\n" "$i" ; done
./adwaita-timed.xml
./bin/hw5/stuff/book/chapter42servletexample/build/web/META-INF/context.xml
./bin/hw5/stuff/book/chapter42servletexample/build/web/WEB-INF/beans.xml
./bin/hw5/stuff/book/chapter42servletexample/build/web/WEB-INF/web.xml
Perl
Perl có một mô-đun Find
, cho phép duyệt qua thư mục cây đệ quy. Trong find()
hàm đặc biệt , chúng ta có thể định nghĩa một chương trình con mong muốn và thư mục mà chúng ta muốn duyệt qua, trong ví dụ này là .
. Một lớp lót trong trường hợp như vậy sẽ là:
bash-4.3$ perl -le 'use File::Find; find(sub{-f && $_ =~ /.xml$/ && print $File::Find::name},".")'
./adwaita-timed.xml
./CLEAR_DESKTOP/blahblah/hw5/stuff/book/jsf2demo/build/web/WEB-INF/beans.xml
./CLEAR_DESKTOP/blahblah/hw5/stuff/book/jsf2demo/build/web/WEB-INF/web.xml
./CLEAR_DESKTOP/blahblah/hw5/stuff/book/liangweb/build.xml
Con trăn
Trong khi Perl có toàn bộ mô-đun dành riêng cho duyệt qua cây đệ quy, Python có một chức năng gọn gàng walk()
là một phần của os
mô-đun và liên tục trả về tuple của đường dẫn trên cùng, danh sách tất cả các thư mục con và danh sách tên tệp. Chúng tôi có thể làm như sau:
bash-4.3$ python -c 'import os,sys; [ sys.stdout.write(os.path.join(r,i)+"\n") for r,s,f in os.walk(".") for i in f if i.endswith(".xml") ]'
./adwaita-timed.xml
./CLEAR_DESKTOP/blahblah/hw5/stuff/book/jsf2demo/build/web/WEB-INF/beans.xml
./CLEAR_DESKTOP/blahblah/hw5/stuff/book/jsf2demo/build/web/WEB-INF/web.xml
./CLEAR_DESKTOP/blahblah/hw5/stuff/book/liangweb/build.xml
Điều này có thể gọn gàng hơn như một kịch bản:
#!/usr/bin/env python
import os,sys
for r,s,f in os.walk("."):
for i in f:
if i.endswith(".xml")
print(os.path.join(r,i))
tìm thấy
Các câu trả lời khác đã được đề cập find
cho giao dịch đệ quy và đó là công cụ tiếp theo cho công việc. Điều cần đề cập là thực tế find
có nhiều công tắc dòng lệnh, chẳng hạn như -printf
in đầu ra ở định dạng mong muốn, -type f
chỉ tìm các tệp thông thường, -inum
tìm kiếm theo số inode, -mtime
tìm kiếm theo ngày sửa đổi, -exec <command> {} \;
để thực thi một lệnh cụ thể để xử lý tệp với việc truyền tệp dưới dạng đối số (nơi giữ chỗ {}
chuẩn find
cho tệp hiện tại) và nhiều tệp khác vì vậy vui lòng đọc trang hướng dẫn find
.
ls -R | grep .xml