मुझे लगता है कि "sftp क्लाइंट" द्वारा आप एक OpenSSH SFTP क्लाइंट का उल्लेख करते हैं। "समस्या" यह है कि जब आप दबाते हैं Ctrl+C, तो यह अपलोड को रोक देता है और रिमोट फाइल को साफ-साफ बंद कर देता है, जैसे कि अपलोड पूरी तरह से समाप्त हो गया है (ध्यान दें कि यह एक सही व्यवहार है और कई अन्य एसएफटीपी ग्राहक समान व्यवहार करते हैं)। इसलिए सर्वर के पास यह बताने का कोई तरीका नहीं है कि अपलोड बाधित हुआ था।
वैसे यह कड़ाई से बोल रहा है, क्योंकि OpenSSH क्लाइंट फ़ाइल बनाते समय सर्वर को एक आकार संकेत भेजता है। लेकिन OpenSSH सर्वर उस जानकारी का उपयोग नहीं करता है और न ही लॉग इन करता है। हालांकि आकार को लॉग करने के लिए इसके कोड को संशोधित करना बहुत आसान होगा, अगर यह आपके लिए एक विकल्प है।
देखें process_open
में sftp-server.c
:
a = get_attrib();
flags = flags_from_portable(pflags);
mode = (a->flags & SSH2_FILEXFER_ATTR_PERMISSIONS) ? a->perm : 0666;
logit("open \"%s\" flags %s mode 0%o",
name, string_from_portable(pflags), mode);
logit
कथन को इसमें बदलें :
logit("open \"%s\" flags %s mode 0%o size %llu",
name, string_from_portable(pflags), mode, (unsigned long long)a->size);
ध्यान दें कि आकार संकेत भेजना वैकल्पिक है। जबकि कुछ SFTP ग्राहक इसे (जैसे OpenSSH या WinSCP) भेजेंगे, कुछ (जैसे PSFTP, FileZilla, या LFTP) नहीं करेंगे। ऐसे मामले में, आपको 0 में मिलेगा a->size
।
अगर क्लाइंट ने अपलोड को रद्द कर दिया था (रिमोट फाइल को साफ किए बिना, उदाहरण के लिए, जब sftp
मारा गया हो), तो आप इसे "मजबूर" उपसर्ग से "बंद" रिकॉर्ड करने में सक्षम होंगे:
मजबूर करीब "/data/README.md" बाइट्स 0 लिखा 5366