2012-04-01 68 views
88

Tôi có một tệp có tên là diff.txt. Bạn muốn kiểm tra xem nó có trống không. Đã làm một cái gì đó như thế này nhưng không thể làm cho nó hoạt động.Cách kiểm tra xem tệp có rỗng trong Bash không?

if [ -s diff.txt ] 
then 
     touch empty.txt 
     rm full.txt 
else 
     touch full.txt 
     rm emtpy.txt 
fi 
+12

[-s FILE] Đúng nếu FILE tồn tại và có kích thước lớn hơn 0. Vì vậy, bạn nhận được "empty.txt" nếu "diff.txt" không trống. – Matthias

+2

PS: Nếu bạn muốn kiểm tra một cuộc gọi 'diff' thực tế, chỉ cần kiểm tra giá trị trả về:' if diff foo.txt bar.txt; sau đó, echo 'No difference'' – l0b0

+11

Test có thể được phủ nhận: 'if [! -s diff.txt]; sau đó echo "LÀ EMPTY", khác echo "HAS SOMETHING"; fi' –

Trả lời

124

Lỗi chính tả khó chịu, phải không? Kiểm tra chính tả của empty, nhưng sau đó cũng cố gắng này:

#!/bin/bash -e 

if [ -s diff.txt ] 
then 
     rm -f empty.txt 
     touch full.txt 
else 
     rm -f full.txt 
     touch empty.txt 
fi 

Tôi thích vỏ kịch bản rất nhiều, nhưng một trong những nhược điểm của nó là vỏ không thể giúp bạn khi bạn đánh sai, trong khi một trình biên dịch như C++ biên dịch có thể giúp bạn.

Thông báo ngẫu nhiên rằng tôi đã đổi vai trò của empty.txtfull.txt, như @Matthias đề xuất.

+2

Vỏ có thể trợ giúp với lỗi chính tả. 'empty = empty.txt; full = full.txt; diff = diff.txt; nếu [-s $ {diff?}]; sau đó r = $ {empty?} t = $ {full?}; else r = $ {full?} t = $ {trống?}; fi; rm $ {r?}; chạm vào $ {t?} ' –

+0

Sử dụng công cụ kiểm tra trình bao có thể tìm thấy lỗi chính tả tốt. – Yokai

+1

Chắc chắn điều này sẽ thất bại nếu tệp không tồn tại? Điều này được coi là một kiểm tra nếu tệp chỉ trống. – geedoubleya

40
[ -s file.name ] || echo "file is empty" 
+2

[[-s file.name]] && echo "full" || echo "trống rỗng" – McPeppr

11

[[-s nộp]] -> Kiểm tra nếu tập tin có kích thước lớn hơn 0

if [[ -s diff.txt ]]; then echo "file has something"; else echo "file is empty"; fi 

Nếu cần thiết, điều này sẽ kiểm tra tất cả các file * .txt trong thư mục hiện hành; và báo cáo tất cả các tập tin rỗng:

for file in $(ls *.txt); do if [[ ! -s $file ]]; then echo $file; fi; done 
1

Trong khi câu trả lời khác là chính xác, sử dụng tùy chọn "-s" cũng sẽ hiển thị các tập tin rỗng ngay cả khi tập tin không tồn tại.
Bằng cách thêm séc bổ sung này "-f" để xem tệp có tồn tại trước không, chúng tôi đảm bảo kết quả là chính xác.

if [ -f diff.txt ] 
then 
    if [ -s diff.txt ] 
    then 
    rm -f empty.txt 
    touch full.txt 
    else 
    rm -f full.txt 
    touch empty.txt 
    fi 
else 
    echo "File diff.txt does not exist" 
fi 
Các vấn đề liên quan