Linux dirname command

Lệnh dirname trong Linux: Hướng dẫn chi tiết từ A đến Z

Chào bạn đọc yêu Linux! Bạn đã bao giờ gặp tình huống cần trích xuất đường dẫn thư mục (directory path) từ một đường dẫn file đầy đủ chưa? Nếu có, thì lệnh dirname chính là "vị cứu tinh" của bạn đấy! Trong bài viết này, chúng ta sẽ cùng nhau khám phá mọi ngóc ngách của lệnh dirname trong Linux, từ cú pháp cơ bản, các tùy chọn nâng cao, cho đến những ví dụ thực tế giúp bạn áp dụng ngay vào công việc hàng ngày. Hãy cùng bắt đầu nhé!

dirname là gì và tại sao bạn cần nó?

Lệnh dirname là một tiện ích dòng lệnh (command-line utility) trong Linux và các hệ điều hành Unix-like, được sử dụng để trích xuất phần đường dẫn thư mục của một đường dẫn file. Nói một cách đơn giản, nó sẽ "cắt" phần tên file ra khỏi đường dẫn, chỉ giữ lại phần đường dẫn thư mục chứa file đó. Nghe có vẻ đơn giản, nhưng dirname lại cực kỳ hữu ích trong nhiều tình huống khác nhau.

Ví dụ, bạn có một script cần truy cập vào thư mục chứa chính nó. Thay vì phải "hard-code" đường dẫn, bạn có thể sử dụng dirname để tự động lấy đường dẫn thư mục của script, giúp script trở nên linh hoạt và dễ dàng di chuyển hơn. Hoặc, bạn có thể sử dụng dirname để xử lý hàng loạt file trong một thư mục, chỉ cần trích xuất đường dẫn thư mục một lần và sử dụng nó cho tất cả các file.

Cú pháp cơ bản của lệnh dirname

Cú pháp của lệnh dirname vô cùng đơn giản:

dirname [OPTION] NAME...

Trong đó:

  • NAME...: Là một hoặc nhiều đường dẫn file bạn muốn trích xuất đường dẫn thư mục.
  • OPTION: Các tùy chọn để điều chỉnh hành vi của lệnh (sẽ được đề cập chi tiết hơn ở phần sau).

Ví dụ:

dirname /home/user/documents/report.pdf
  # Kết quả: /home/user/documents

Như bạn thấy, dirname đã loại bỏ phần report.pdf và chỉ giữ lại phần đường dẫn thư mục /home/user/documents.

Các tùy chọn quan trọng của lệnh dirname

Mặc dù cú pháp cơ bản rất đơn giản, dirname vẫn cung cấp một số tùy chọn hữu ích để điều chỉnh hành vi của nó:

  • -z, --zero: Kết thúc mỗi dòng đầu ra bằng ký tự NULL thay vì ký tự newline. Tùy chọn này hữu ích khi bạn muốn xử lý kết quả bằng các công cụ khác có thể gặp vấn đề với ký tự newline.
  • --help: Hiển thị thông tin trợ giúp về lệnh dirname.
  • --version: Hiển thị thông tin phiên bản của lệnh dirname.

Ví dụ sử dụng tùy chọn -z:

dirname -z /home/user/file1 /home/user/file2 | xargs -0 echo
  # Kết quả: /home/user/home/user

Trong ví dụ này, chúng ta sử dụng dirname với tùy chọn -z để trích xuất đường dẫn thư mục của hai file, sau đó sử dụng xargs -0 để in ra kết quả. Tùy chọn -0 của xargs cho phép nó xử lý các dòng được phân tách bằng ký tự NULL, giúp tránh các vấn đề với khoảng trắng hoặc ký tự đặc biệt trong tên file.

Ví dụ thực tế về cách sử dụng dirname

Để giúp bạn hiểu rõ hơn về cách sử dụng dirname, chúng ta sẽ xem xét một vài ví dụ thực tế:

  1. Lấy đường dẫn thư mục của một script:

    Giả sử bạn có một script tên là my_script.sh nằm trong thư mục /opt/my_scripts. Bạn có thể sử dụng đoạn mã sau để lấy đường dẫn thư mục của script:

    SCRIPT_DIR=$(dirname "$(readlink -f "$0")")
          echo "Thư mục của script là: $SCRIPT_DIR"

    Trong đoạn mã này, readlink -f "$0" sẽ trả về đường dẫn đầy đủ của script, sau đó dirname sẽ trích xuất đường dẫn thư mục từ đường dẫn đó. $0 là một biến đặc biệt trong shell script, nó chứa tên của script đang chạy.

  2. Tạo một thư mục mới dựa trên đường dẫn của file:

    Bạn có thể sử dụng dirname kết hợp với lệnh mkdir để tạo một thư mục mới dựa trên đường dẫn của một file:

    FILE=/path/to/my/file.txt
          DIR=$(dirname "$FILE")
          mkdir -p "$DIR/new_directory"

    Trong đoạn mã này, chúng ta lấy đường dẫn thư mục của file file.txt, sau đó tạo một thư mục mới tên là new_directory bên trong thư mục đó. Tùy chọn -p của mkdir sẽ tạo tất cả các thư mục cha (parent directories) nếu chúng chưa tồn tại.

  3. Xử lý hàng loạt file trong một thư mục:

    Bạn có thể sử dụng dirname trong một vòng lặp để xử lý hàng loạt file trong một thư mục:

    for FILE in /path/to/my/files/; do
            DIR=$(dirname "$FILE")
            echo "Đường dẫn của file $FILE là: $DIR"
            # Thực hiện các thao tác khác với file ở đây
          done

    Trong đoạn mã này, chúng ta duyệt qua tất cả các file trong thư mục /path/to/my/files, lấy đường dẫn thư mục của từng file, và in ra đường dẫn đó. Bạn có thể thay thế dòng echo bằng bất kỳ thao tác nào bạn muốn thực hiện với file.

Bảng so sánh dirname với các lệnh tương tự

Lệnh Mô tả Ví dụ
dirname Trích xuất đường dẫn thư mục từ một đường dẫn file. dirname /home/user/documents/report.pdf -> /home/user/documents
basename Trích xuất tên file (hoặc tên thư mục) từ một đường dẫn. basename /home/user/documents/report.pdf -> report.pdf
readlink Hiển thị đường dẫn mà một liên kết tượng trưng (symbolic link) trỏ đến. readlink /usr/bin/python -> /usr/bin/python3.8 (ví dụ)

Câu hỏi thường gặp (FAQ) về lệnh dirname

  1. dirname xử lý các đường dẫn tương đối như thế nào?

    Nếu bạn cung cấp một đường dẫn tương đối cho dirname, nó sẽ trả về đường dẫn tương đối của thư mục chứa file đó. Ví dụ, nếu bạn đang ở trong thư mục /home/user và chạy lệnh dirname documents/report.pdf, kết quả sẽ là documents.

  2. dirname có thể xử lý nhiều đường dẫn cùng một lúc không?

    Có, dirname có thể xử lý nhiều đường dẫn cùng một lúc, bằng cách liệt kê chúng sau lệnh dirname. Ví dụ: dirname file1 file2 file3.

  3. Điều gì xảy ra nếu đường dẫn chỉ chứa tên file mà không có đường dẫn thư mục?

    Nếu bạn cung cấp chỉ tên file cho dirname, nó sẽ trả về dấu chấm (.), biểu thị thư mục hiện tại.

  4. dirname có thể được sử dụng trong các ngôn ngữ lập trình khác không?

    Có, hầu hết các ngôn ngữ lập trình đều cung cấp các hàm hoặc thư viện tương tự để trích xuất đường dẫn thư mục từ một đường dẫn file. Ví dụ, trong Python, bạn có thể sử dụng hàm os.path.dirname().

Kết luận

Lệnh dirname là một công cụ đơn giản nhưng vô cùng mạnh mẽ trong Linux, giúp bạn dễ dàng trích xuất đường dẫn thư mục từ một đường dẫn file. Với cú pháp đơn giản và các tùy chọn hữu ích, dirname có thể giúp bạn giải quyết nhiều vấn đề trong công việc hàng ngày, từ quản lý file, xử lý script, đến tự động hóa các tác vụ. Hy vọng bài viết này đã cung cấp cho bạn đầy đủ kiến thức cần thiết để làm chủ lệnh dirname. Chúc bạn thành công và hẹn gặp lại trong những bài viết tiếp theo!

Last Updated : 22/08/2025