سؤال كيفية تقليل اسم الملف بنسبة 1 في أوبونتو


لدي حوالي 200 .png الملفات في مجلد بلدي ، تسمية مثل -

02.png
03.png
04.png
...
201.png

كما ترون أنا لا أميل 01.png لذلك أريد إعادة تسمية جميع الملفات التي تقلل من واحد ، لجعلها -

01.png
02.png
03.png
...
200.png

هل من الممكن القيام بذلك عبر أي أمر في أوبونتو؟

فيما يلي الأمر الذي أحاول دون حظ -

rename -n '/d{2}\.png$d{2}-1\.png/' *.png

5
2017-09-23 06:09


الأصل


JacobVlijm أنا لا أعتقد أن سلسلة البداية هي - 01 ، 02 .. وليس مثل 1 ، 2 ... - Nesh
كنت قد ترغب في تحديث الشاشة الخاصة بك ، وتراجعت تصويتي منذ فترة ، وصل إلى نفس النتيجة :) - Jacob Vlijm


الأجوبة:


يمكن القيام بذلك مع أكثر تعقيدًا إلى حد ما rename أمر:

rename -n 's/(\d{2,3}).png/sprintf("%02d", $1-1) . ".png"/e' *.png

ملاحظات:

  • تحتاج لفصل المباراة والاستبدال مع /.
  • تحتاج إلى تجميع الجزء الذي تريد تذكره باستخدام $1 مع () (في هذه الحالة (\d{2,3})).
  • يجب أن تتطابق مع أرقام 2 و 3 أرقام ، أو 100.png سيصبح 1-1.png.
  • لاستخدام حساب أو وظائف في الاستبدال ، يجب أن يتم تقييمه كتعبير ، لهذا السبب هناك e بعد الاغلاق /.
  • لدمج السلاسل في تعبير تم تقييمه ، يجب عليك استخدامه . (بالتالي . ".png").
  • لربط الأوتار بالأصفار (من المفترض أن تكون ما تريده ، بما أن ملفاتك الأصلية تحتوي على الأصفار) ، استخدمه sprintf. %02d سوف يجهز بأصفار إذا كان رقمك لا يحتوي على رقمين على الأقل.

مثال:

$ rename -n 's/(\d{2,3}).png/sprintf("%02d", $1-1) .  ".png"/e' *.png | head
02.png -> 01.png
03.png -> 02.png
04.png -> 03.png
05.png -> 04.png
06.png -> 05.png
07.png -> 06.png
08.png -> 07.png
09.png -> 08.png
100.png -> 99.png
101.png -> 100.png

اعتمادا على إصدار rename، فقد تواجه مشكلة في إعادة تسمية الملفات إذا كان الهدف موجودًا بالفعل. في مثل هذه الحالات ، يكون الحل البديل بسيطًا هو إنشاء دليل مؤقت وإعادة تسمية / نقل الملفات الموجودة هناك:

mkdir temp
rename -n 's/(\d{2,3}).png/sprintf("temp\/%02d", $1-1) . ".png"/e' *.png

لاحظ أن / بعد temp يجب أن يتم الإفلات منه ، أو سيتم اعتباره النهائي / من s// أمر.


6
2017-09-23 06:44



فيما يلي إخراج الأمر - 01.png renamed as 00.png 02.png not renamed: 01.png already exists 03.png not renamed: 02.png already exists - Nesh
Nesh جعل مجلد مؤقت وإعادة تسمية + الانتقال إلى هذا المجلد: mkdir temp; rename -n 's/(\d{2,3}).png/sprintf("temp\/%02d", $1-1) . ".png"/e' *.png. - muru
Nesh تحريرها وفقا لذلك. - muru