سؤال

وكنت قد كتبت سكربت شل التي يحاول سحب ملف القطران من خادم بروتوكول نقل الملفات وuntar هو محليا. ولست بحاجة لاستخراج ملفات معينة من أرشيف القطران. اسم الملف من tarfile يحتوي على التاريخ؛ أنا بحاجة إلى أن تكون قادرة على تحديد ملف القطران على أساس هذا التاريخ.

وabc_myfile_$date.tar هو تنسيق ملف أنا سحب من خادم بروتوكول نقل الملفات.

قانون بلدي تبدو الحالية مثل هذا:

for host in ftpserver
do
ftp -inv host <<END_SCRIPT
user username password
prompt
cd remotepath
lcd localpath
mget *myfile_$date*.tar
quit
END_SCRIPT
done

for next in `ls localpath/*.tar`
do
tar xvf $next *required_file_in_tar_file*.dat
done

وعندما تشغيل البرنامج النصي لست قادرا على untar الملفات

وأنا قادرة على الحصول على ملف القطران واحد من خادم بروتوكول نقل الملفات إلا إذا أذكر الاسم الدقيق لهذا الملف. أود الحصول على الملف الذي myfile_$date في اسمها. بعد هذا أود أن استخراجها إلى مسار محلي للحصول على الملفات المحددة في هذا الملف القطران التي تتكون من بلدي required_files الأسماء.

هل كانت مفيدة؟

المحلول

ويمكنك الحصول على ملف .tar، ولكن فك ضغط مع خيار z. الملفات المضغوطة (تلك التي تتطلب z) عادة ما يكون .tar.gz البادئة. محاولة

tar xvf $next *required_file_in_tar_file*.dat

نصائح أخرى

أولا، إذا كنت ترغب في استخدام أحرف البدل لاسم الملف الذي تحصل عليه من خادم تحتاج إلى استخدام mget بدلا من الحصول عليها. توسيع ملف البدل (لل*) لا يعمل للأمر الحصول عليها.
وبمجرد الانتهاء من سحب ملف العملية القطران سوف تعمل كما هو متوقع، فإن معظم الإصدارات الحديثة من لينكس / BSD لها أي القطران "الذكية"، والتي لا تحتاج إلى 'ض' الأوامر لتحديد أن يتم ضغط الملف القطران - أنها سوف معرفة أن يتم ضغط كتل القطران من تلقاء نفسها وإلغاء ضغط تلقائيا، وتوفير أداة ضغط / إزالة الضغط المناسب هو على النظام (BZIP2 لملفات .jz، GZIP لملفات .gz).

وأنا لست متأكدا تماما، ولكن لم بروتوكول FTP يكن لديك mget الأمر إذا كنت تريد تحميل ملفات متعددة؟ (بدلا من get)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top