Làm thế nào để kiểm tra nếu một thư mục tồn tại trong dòng lệnh Linux?


28

Làm thế nào để kiểm tra nếu một thư mục tồn tại trong dòng lệnh Linux?

Dung dịch: [ -d ¨a¨ ]&&echo ¨exists¨||echo ¨not exists¨


4
Vì vậy, đánh dấu nó là giải pháp.
BlueRaja - Daniel Pflughoeft

Câu trả lời:


40
$ if test -d /the/dir; then echo "exist"; fi 

Tôi cần nó trong dòng lệnh, không phải trong một kịch bản.

5
Đó là dòng lệnh. Bạn có thể nhập nó vào bash trực tiếp hoặc bạn có thể tiếp tục nó thành test -d /the/dir: test -d /the/dir && echo "exist" || echo "does not exist"nhưng chúng thực sự giống nhau.
David Rodríguez - dribeas

Không phải vỏ của mọi người là bash!
rebierpost

@reinierpost thì chúc bạn may mắn ...
Stefano Borini

@Stefano Borini: Tôi vẫn sử dụng tcshvì tôi quá lười để viết lại .tcshrc. Nhưng quan trọng hơn: điều này có thể đã giải thích vấn đề của OP.
rebierpost

11

Giả sử vỏ của bạn là BASH:

if [ -d /the/dir ]; then echo 'Exists'; else echo 'Not found'; fi

lỗi cú pháp gần mã thông báo bất ngờ `sau đó '

Sau đó tìm ra vỏ của bạn là gì. Có lẽ cshhay tcsh?
Revierpost

8
[ -d /home/bla/ ] && echo "exits"

Tôi có thể có một cái gì đó giống như ELSE, để hiển thị một văn bản ngay cả khi thư mục không tồn tại không?

Giải pháp thay thế:[ -d /home/bla/ ] && echo "exist" ; [ ! -d /home/bla/ ] && echo "doesnt exist"
học tập

7

Cách chính tắc là sử dụng tiện ích test (1):

test -d path

trong đó "path" là tên đường dẫn của thư mục được đề cập.


Lệnh không xuất hiện để tự thực hiện nhưng khi được nối với a echo "Directory Exists".
Ejaz

2

[ -d "YOUR_DIR" ] && echo "is a dir"

ví dụ:

[ -d / ] && echo "root dir"

sẽ xuất ra : root dir.


[-d: lệnh không tìm thấy đây là những gì tôi nhận được

Giữa "[" và "-" PHẢI là khoảng trắng. Điều này sẽ làm việc trên vỏ Bourne và Bash.

0

Để kiểm tra xem một thư mục có tồn tại trong tập lệnh shell hay không, bạn có thể sử dụng như sau:

dir=$1

if [ -d "$dir" ]; then

 #means that $dir exists.

fi

để kiểm tra ngược lại, thêm !trước-d ->[ ! -d ....]


Chào mừng bạn đến với Siêu người dùng! Điều này trùng lặp một câu trả lời khác và không thêm nội dung mới. Vui lòng không đăng câu trả lời trừ khi bạn thực sự có điều gì đó mới để đóng góp.
DavidPostill
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.