Термінал - Перейменування файлу на основі підстановки


0

У мене є сценарій, коли в папці є два файли:

1) Foo bar.pdf

2) Ще один файл.pdf

Я зливаю обидва файли в один. Отриманий файл повинен бути названий "Foo.pdf".

Отже .sh файл міститиме таку функцію:

Перевірте, чи містить * .pdf "bar" // перевірте всі файли PDF у папці на слово "bar" у назві файлу.

Якщо TRUE ($ value = "Foo.pdf") // витяг "Foo" з імені файлу

mkfile = $ value.pdf

Таким чином, я закінчу щось таким:

(Каталог 1)

ФАЙЛ 1: Foo Blah Blah 123.pdf

ФАЙЛ 2: Ще один файл.pdf

... запустити сценарій ...

ФАЙЛ 3: Foo.pdf // створений файл

Сподіваюся, що це має сенс? Чи може хтось, будь ласка, вказати мене в правильному напрямку?


Незрозуміло, що саме ви хочете зробити, але те, що вам потрібно, це bashаналіз параметрів: у шляху до файлу ${FilePath%/*}- це шлях до каталогу, ${FilePath##*/}це ім'я файлу та [ "${FileName#*bar} != "SFileName" ]тести на barім'я файлу. Ви перейменовуєте в mv, але будь-який шлях до каталогу в старому імені повинен бути присутнім у новому (інакше файл буде перейменований та переміщений у поточний каталог).
AFH

@AFH Я відредагував своє запитання, щоб зробити його яснішим. Дякую за ваш коментар, це, безумовно, дало мені початок.
Guit4eva

Повідомте мене, якщо ви застрягнете.
AFH

Отже, ви намагаєтеся знайти всі файли з певною підрядкою посередині імені, а потім перейменуйте ці файли, щоб викреслити цю підрядку з їхніх імен. Це правильно?
Spiff

Відповіді:


0

Ось один із способів:

for FILE in *bar.pdf; do
    NEWNAME=$(echo $FILE | sed -En 's/(.*)bar.pdf/\1.pdf/p')
    mv $FILE $NEWNAME
done

Пояснення: Для використання bashкожного файлу, який закінчується в "bar.pdf", використовується синтаксис for-loop та обшивка оболонки (відповідність імен файлів на основі шаблону). Він приймає ім'я кожного файлу і надсилає його sed. sedповідомляється запам'ятати частину імені файлу перед "bar.pdf", а потім замінити ім'я файлу на запам’ятовувану частину, а ".pdf" додається до кінця. Це нове ім'я файлу зберігається як NEWNAME. Потім mvвикликається перейменування файлу на його нове ім'я, і ​​цикл продовжує обробляти наступний файл (якщо є ще файли, що відповідають * bar.pdf).

(Випробувано за допомогою вбудованої системи macOS High Sierra 10.13.6 bashі sed. Інструменти вашої системи можуть відрізнятися. Я впевнений, що GNU sedв Linux використовує різні параметри командного рядка, ніж BSD sedв macOS, тому sedспочатку перевірте свою локальну сторінку man .)

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