Tôi chỉ cố gắng liệt kê tất cả các thư mục và tệp trong thư mục hiện tại và cũng viết nếu chúng là tệp hoặc thư mục với lệnh sau:
find -exec echo `echo {} : ;if [ -f {} ]; then echo file; else echo directory;fi` \;
Tôi biết đó là một lệnh ngớ ngẩn, tôi có thể sử dụng những thứ khác như -type f
hoặc -type d
, nhưng tôi muốn tìm hiểu lý do tại sao đoạn mã đó không hoạt động như tôi mong đợi. Nó chỉ in thư mục cho tất cả chúng. Ví dụ: trong khi đầu ra find
là:
.
./dir
./dir/file
đầu ra của mã của tôi là:
. : directory
./dir : directory
./dir/file : directory
Và đầu ra của
echo `echo dir/file : ;if [ -f dir/file ]; then echo file; else echo directory;fi`
Là
dir/file : file
Tôi đang làm việc Ubuntu 14.10
và sử dụngfind (GNU findutils) 4.4.2
"{}"
. Tại sao bạn sử dụng echo
hai lần?
echo "{}" : ;if [ -f "{}" ]; then echo file; else echo directory;fi
\;
find -exec bash -c 'echo -n "{} : ";if [ -f "{}" ]; then echo file; else echo directory;fi' \;