Liệt kê các thư mục chứa các tệp khớp với biểu thức chính quy


5

Tôi muốn thiết lập một hệ thống lọc đơn giản trên máy chủ FreeBSD cho phép tôi tạo các "lượt xem" tùy ý của các thư mục.

Chẳng hạn, tôi muốn có thể liệt kê tất cả các thư mục phù hợp với mẫu "* .mp3" nhưng chỉ hiển thị tên thư mục.

Ví dụ, nếu tôi chạy lệnh trên thư mục nhạc của mình, tôi muốn có thể hiển thị tất cả các thư mục có mp3 trong một lệnh và tất cả các thư mục có tệp flac trong đó dưới dạng một lệnh riêng.

Lệnh find . -name "*.mp3"gần như thực hiện những gì tôi muốn nhưng nó sẽ hiển thị một mục nhập cho mỗi tệp. Có cách nào để giới hạn tìm thấy một kết quả cho mỗi thư mục không?

Câu trả lời:


3

Sử dụng tập lệnh này:

find / -name "*.mp3" | grep -o '.*/' | sort | uniq > mp3files

Hoàn hảo, cảm ơn. Tôi thích tránh xargs nếu có thể để rõ ràng về lệnh.
javanix

4

Giới thiệu về:

tìm thấy . -name '* .mp3' -print0 | xargs -0 -i dirname {} | uniq

Tôi nhận được một cái gì đó như:

./mnt/mp3/Adicts/Complete Bộ sưu tập đĩa đơn (1995)

./mnt/mp3/Adicts/Rise and Shine (2002)

./mnt/mp3/Adicts/Songs of Praise (1981)

./mnt/mp3/Adicts/Toven-seven(1992)

./mnt/mp3/Adicts/Ultimate Nghiện

./mnt/mp3/Adicts/Rery Best Of Adicts (1998)


3
Ngắn hơn trên Linux: find . -name '*.mp3' -printf '%h\n' | uniqThật không may, tôi không biết nếu FreeBSD find-printf.
ephemient
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.