Bạn đang sâu trong việc trích dẫn địa ngục ở đó.
Của bạn tìm thấy
lệnh chuyển đến sh -c
một lập luận như
mkdir -p "$(tên thư mục /mnt/data/test/20220508/mnt/data/abc/def.log)"; chạm /mnt/data/test/20220508/mnt/data/abc/def.log; du -S /mnt/data/abc/def > /mnt/data/test/20220508/mnt/data/abc/def.log; awk -F'\t' '{print "CHÈN VÀO DATE20220508(folder_size, folder_location) VALUES('$1', '$2');"}' /mnt/data/test/20220508/mnt/data/abc/def. đăng nhập
Hiện nay sh
phân tích cú pháp này, loại bỏ một cấp độ trích dẫn. Nó mở rộng các $(tên thư mục /mnt/data/test/20220508/mnt/data/abc/def.log)
đến /mnt/dữ liệu/kiểm tra/20220508/mnt/dữ liệu/abc
, và các biến $1
và $2
bên trong awk
thành các chuỗi trống (vì nó không nhận được bất kỳ tham số vị trí nào), đưa ra
mkdir -p /mnt/data/test/20220508/mnt/data/abc;touch /mnt/data/test/20220508/mnt/data/abc/def.log; du -S /mnt/data/abc/def > /mnt/data/test/20220508/mnt/data/abc/def.log; awk -F\t '{print "CHÈN VÀO DATE20220508(folder_size, folder_location) VALUES(, );"}' /mnt/data/test/20220508/mnt/data/abc/def.log
(Tôi đã chèn lại các trích dẫn đơn xung quanh awk
đối số văn bản chương trình cho rõ ràng.)
Cách dễ nhất là tạo một tệp cho awk
chương trình mà sau đó bạn chuyển đến awk
thông qua -f
Tùy chọn. Sau đó tôi cũng khuyên bạn nên thực hiện bài tập FS = "\t"
trong tệp đó thay vì sử dụng -F
Tùy chọn.
Cuối cùng, nếu bạn không còn sử dụng tệp nhật ký nào nữa ngoại trừ việc tạo các câu lệnh SQL, thì bạn có thể đơn giản hóa đáng kể tập lệnh của mình bằng cách chuyển đầu ra của du
trực tiếp đến awk
, Thích:
DT=`ngày +"%Y%m%d"`
tìm /mnt/data -maxdepth 2 -mindepth 2 -type d -exec sh -c 'du -S {} | awk -v DT='$DT' -f /mnt/data/makeinserts.awk' \;
với tập tin /mnt/data/makeinserts.awk
chứa tinh khiết awk
chương trình:
BẮT ĐẦU{FS="\t"}
{print "CHÈN VÀO NGÀY"DT"(folder_size, folder_location) VALUES('"$1"', '"$2"');"}