'перейменувати' на файли з апострофами


4

Я намагаюся пакетно перейменувати деякі файли за допомогою rename утиліта (зокрема, версія perl, тобто prename ). На жаль, назви файлів містять апострофи, і це втручається. Я не впевнений, як діяти.

Ось що я спробував:

rename -n '/.*(\d\d).jpg/Foo's Excellent Photo - $1.jpg/'  # fails due to end of string
rename -n '/.*(\d\d).jpg/Foo\'s Excellent Photo - $1.jpg/' # fails due to end of string
rename -n "/.*(\d\d).jpg/Foo's Excellent Photo - $1.jpg/"  # fails due to shell expansion

Який правильний синтаксис?


Яку версію перейменування ви використовуєте? Жодне з моїх досліджень не пропонує перетворення типу regexp. Крім того, ваш регулярний вираз передбачає, що ім'я з апострофом є ​​тим, до чого ви переходите. ~ Це обов'язково? Чи можете ви піти без апострофа?
dafydd

1
Це утиліта перейменування Perl, яка упакована для Debian / Ubuntu. Подивитися: stackoverflow.com/questions/14327613/… для прикладу. Збереження апострофа - це питання питання.
nomen

Відповіді:


4
  1. Ваш останній варіант є правильним для використання одиночних внутрішніх подвійних лапок - але ви повинні уникнути також $1 інакше оболонка розгорне її:

    "/.*(\d\d).jpg/Foo's Excellent Photo - \$1.jpg/"
    
  2. Тим не менш, я все ще отримую помилку

    Bareword found where operator expected at (eval 1) line 1, near "/.*(\d\d).jpg/Foo's"
        (Missing operator before Foo's?)
    syntax error at (eval 1) line 1, near "/.*(\d\d).jpg/Foo's Excellent "
    

    Але це не через неправильне цитування, а тому perl-rename очікує регулярний вираз perl. І ви, очевидно, хочете шукати і замінювати, тому користуйтеся s/.../.../, не тільки /.../.../.

  3. Отже, підсумовуючи, ця команда працює бездоганно:

    $ rename -n  "s/.*(\d\d).jpg/Foo's Excellent Photo - \$1.jpg/" *
    PIC44.jpg renamed as Foo's Excellent Photo - 44.jpg
    PIC45.jpg renamed as Foo's Excellent Photo - 45.jpg
    

Дякую! Я використовував s ///, але забув поставити це питання.
nomen
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.