Lập trình shell

Đánh giá cuối khóa

Nguyễn Hải Châu (nhchau@gmail.com)
Trường Đại học Công nghệ, ĐHQGHN

Mô tả và yêu cầu

Hãy xây dựng nhóm tiện ích "tìm file/từ nhanh" cho một thư mục DIR bất kỳ và toàn bộ các file và thư mục con của thư mục DIR đó:

  • Tiện ích fileindex: Liệt kê toàn bộ các file, thư mục có trong DIR để tạo một file chỉ số .fileindex ở dạng text:
    • File có nhiều dòng
    • Mỗi dòng chứa số hiệu file, tên file và kiểu file (ví dụ thư mục, file thông thường, file thiết bị, symbolic link...)
    • File chỉ số được cập nhật định kỳ hoặc khi có yêu cầu để có sự nhất quán giữa tên file trong chỉ số và các file có thực trên DIR

Mô tả và yêu cầu

  • Tiện ích wordindex nhận tham số từ dòng lệnh f1 f2... và tạo chỉ số cho các file f1, f2, ... được ghi trong .wordindex
  • Tiện ích wordindex chỉ cập nhật chỉ số cho các file text
  • File chỉ số .wordindex là một file text có nhiều dòng, mỗi dòng gồm 3 trường:
    • Trường 1: Số hiệu inode của file fx được tạo chỉ số
    • Trường 2: Từ w xuất hiện trong file fx
    • Trường 3: Danh sách các dòng trong fx có từ w xuất hiện
    • .wordindex được cập nhật định kỳ hoặc khi có yêu cầu để tạo sự nhất quán
  • Tiện ích findfile nhận tham số vào là một phần tên file, kiểu file; in kết quả gồm inode, tên các file cùng kiểu có tên chứa phần tên file đó
  • Tiện ích findword nhận tham số vào là một từ; in kết quả gồm inode, tên các file chứa từ đó cùng với các dòng trong từng file mà từ đó xuất hiện

Ví dụ

  • Giả sử thư mục DIR có hai file f1f2, f1 có số hiệu inode=100, f2 có số hiệu inode=101 và nội dung lần lượt như sau:
tu1 tu2
tu2 tu3
tu3 tu4
tu5 tu3
  • File .fileindex có nội dung như sau
100 ./f1 t
101 ./f2 t

Ví dụ

  • File .wordindex có nội dung:
100 tu1 1
100 tu2 1,2
100 tu3 2
101 tu3 1,2
101 tu4 1
101 tu5 2

Ví dụ

  • Với ngữ cảnh như trên:
    • Câu lệnh findfile f1 t cho kết quả 100 f1, findfile f2 d cho kết quả rỗng
    • Câu lệnh findword tu3 cho kết quả
100 ./f1 2
101 ./f2 1,2

findword tu6 cho kết quả rỗng