Tôi biết tôi có thể sử dụng ls -latđể tìm ra có bao nhiêu byte có một tệp và sau đó nhân với 8 để tìm ra có bao nhiêu bit. Nhưng điều này có thể chỉ trong một dòng lệnh?
Tôi biết tôi có thể sử dụng ls -latđể tìm ra có bao nhiêu byte có một tệp và sau đó nhân với 8 để tìm ra có bao nhiêu bit. Nhưng điều này có thể chỉ trong một dòng lệnh?
Câu trả lời:
Với GNU du:
du -b FILE | awk '{ print $1, "* 8" }' | bc
bc- awkcó thể tự làm toán:du -b FILE | awk '{print $1 * 8}
wc -c < FILEtương đương di động (đối với các tệp không thường xuyên, tuy nhiên, nó có tác dụng phụ khi đọc chúng)
Một giải pháp shell + GNU coreutils:
echo $(( 8 * $(stat -c%s FILE) ))
Các -c%stùy chọn để stattrở về chỉ là kích thước tập tin theo byte, loại bỏ bất kỳ nhu cầu về xử lý văn bản bổ sung. Cú pháp này được hỗ trợ bởi lõi core GNU và do đó sẽ hoạt động theo hầu hết các bản phân phối linux.
Là một ngoại lệ trên linux, nếu một người đang chạy zsh với mô-đun zsh / stat tùy chọn, thì người ta cần chỉ định một đường dẫn để lấy lõi GNU:
echo $(( 8 * $(command stat -c%s FILE) ))
Với GNU find(trước GNU stathàng thập kỷ):
find file -prune -printf '%s*8\n' | bc
Tương đối hợp lý:
ls -ld -- "$file" | awk '{print $5*8;exit}'
Có thể trong một dòng, bởi vì bạn có thể đặt một số lệnh trên một dòng, ví dụ: được kết nối bằng đường ống hoặc thay thế lệnh:
echo $(stat -c %s FILE) '* 8' | bc
(Cảm ơn @frostschutz đã cập nhật).
ZSize: 5ví dụ
stat -c %s FILEđể in kích thước trực tiếp, thay vì sed?
Tập tin duy nhất:
wc -c yourfile | awk '{print $1*8}'
Tập tin Mutipl:
wc -c yourfile1 yourfile2 | awk '{$1*=8; print $0}'
Điều này cũng làm việc cho một tập tin duy nhất. Nó không hoàn toàn chống đạn, xem bình luận của Stephane .
Đây là các lệnh tuân thủ tiêu chuẩn POSIX.
a btệp dưới dạng a b(chuỗi các khoảng trống được chuyển đổi thành một khoảng trắng, xóa các khoảng trống theo sau).
NR == 1