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"');"}