Замініть файли на інші з інших папок, які відповідають першим жетоном у назві файлу


2

Скажімо, у мене є дві папки:

ls /A/
    01 - IncorrectName.flac
    02 - otherincorrect.flac

ls /B/
    01 - CorectName.flac
    02 - Othercorrect.flac

Як би я перемістив файли з dir A в B, але використовуючи назви файлів з dir B?

Чи можу я це робити автоматично $ mv /A/01 - IncorrectName.flac /B/01 - CorrectName.flac?

Перші 5 символів усіх імен файлів завжди "NN -"

Відповіді:


4

Я не впевнений, що я розумію, чого ви хочете, але це може бути це в башті:

#! /bin/bash
for file in "$1"/[0-9][0-9]*.flac ; do
    newname="$2"${file#"$1"}
    newname=${newname:0:5+${#2}}
    mv "$file" "$newname"*
done

Оновлення : має працювати з аргументами командного рядка. Трюк у тому, що довжина струни вже не була постійною, отже ${#2}.


Я хочу використати існуючі імена файлів з каталогу B під час перейменування / переміщення файлів у каталозі A, порівняння файлу в А до імені в B за допомогою перших 5 символів імен файлів. Тобто номер треку цих файлів flac.
Alasdair

Bash скаржиться на "погану підстановку", у моїх іменах папок є пробіли, але переміщення їх лише до A і B не мало жодного ефекту, проблема залишається.
Alasdair

Привіт, навіть із заміненою помилкою друку я отримую "Погану заміну"
Alasdair

GNU bash, версія 4.1.5 (1) -випуск (i486-pc-linux-gnu)
Alasdair

Дивно. Чи є в каталогах інші файли? У такому випадку вам слід скористатись більш безпечною підстановою замість *, наприклад, наприклад [0-9][0-9]*.flac.
choroba
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.