كيفية إعادة تسمية / نقل جميع الملفات مع امتداد معين؟

StackOverflow https://stackoverflow.com/questions/556316

  •  05-09-2019
  •  | 
  •  

سؤال

أنا أتعلم TCL (توقع) والآن جئت إلى مشكلة مثيرة للاهتمام. أحتاج إلى أمر لنقل / إعادة تسمية مجموعة من الملفات مع التمديد .status. حاولت هذه:

spawn /bin/mv *.status some_dir
exec /bin/mv *.status some_dir

بالطبع، هذا لم ينجح. لقد غاضب قليلا ووجدت شيئا عن Glob، لكن يبدو أنه يعمل بالطريقة التي أريدها. إذا فعلت:

exec /bin/mv [glob *.status] somedir

مهد يشكو من أنه "1.status 2.status 3.Status ... إلخ." ليس ملف صالح. كما لو أن قائمة الملفات بأكملها متسلسلة في سلسلة واحدة بدلا من التعامل معها بشكل منفصل.

في محاولة للعثور على مزيد من المعلومات عبر Google تقودني إلى الكثير من الروابط المكسورة والعفا عليها الزمن، لذلك أنا آمل بجانب حل هذه المشكلة، هل يمكن أن تشيرني إلى بعض الموارد الجيدة عبر الإنترنت ل TCL / توقع الأساسيات والمخاطر الشائعة.

تحديث: سيتم قبول الحلول الوحيدة التي تستخدم TCL القياسية والأدوات القياسية في / BIN.

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

المحلول

$ LS -1 1.Status 2.Status rename.tclsh * بعض الكلمات / كلمتين *rename.tclsh $ ls -1 rename.tclsh * some_dir / $ ls -1 some_dir / 1.status 2.status كلمتين.

نصائح أخرى

إجابة راندي قصيرة وصحيحة ولكنها تستخدم exec دون حاجة. إجابة جوزيف قوية للغاية ولكنها طويلة بعض الشيء.

للحصول على إجابة قصيرة وذات اصطلاحي، أود استخدامها (يتطلب TCL 8.5):

ملف إعادة تسمية {*} [glob * .status] بعض_dir

proc move_to_dir {filenames dirname} {
    foreach filename $filenames {
        file rename $filename [file join $dirname [file tail $filename]]
    }
}
# Example:
move_to_dir [glob -nocomplain *.status] ~/foo/bar/

يعمل هذا الحل مع الملفات بأسماء تحتوي على مسافات، عندما يكون هناك الكثير من الملفات وغيرها:

exec find -maxdepth 1 -name *.status -print0 | xargs -0 mv -t some_dir

لكنه يحتاج إلى العثور على و xargs التي هي في أغلب الأحيان في / USR / بن، وليس / بن.

كمستوى أمان عند استخدام أوامر "Find" المعقدة والحذف البيانات المحتملة، ألصق "صدى" أمام الأمر والتقاطه إلى ملف.
يمكنني بعد ذلك التحقق من الأوامر المدرجة في الملف قبل استخدام "المصدر" لتشغيله.

إنها أيضا طريقة للتعامل مع تلك ملفات حالة الحافة العرضية يدويا.

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