Перейменування файлів зі списку імен файлів


1

Я все ще дуже новачок сценаріїв оболонок, тому я впевнений, що ця команда неправильна. Я намагаюся перейменувати папку файлів на імена у файлі txt. Обов’язковою умовою є те, що файли filenames.txt і файли в папці вже організовані так, щоб відповідати першому рядку першому файлу в системі. Що я отримав:

while read line; do echo -e "$line\n" | for f in *mkv do mv f $1; done < filenames.txt

але це не спрацювало. Ви можете допомогти мені виправити це?

Дякую

Відповіді:


2

Якщо у вас немає алгоритмічного правила перейменування файлів (тобто вам насправді потрібен файл у якості введення), я б запропонував

  1. створити txt-файл із списку файлів, які потрібно перейменувати, наприклад:

    знайти. -name "* .mkv"> files.txt

  2. відредагуйте цей файл та додайте нове ім'я після старого у кожному рядку, наприклад

    ./myfirst.mkv ./mynewfirst.mkv

  3. обробити цей файл:

    під час читання рядка; робити eval mv $ line; виконано <files.txt


0

Я беру натхнення звідси: https://unix.stackexchange.com/a/26604

Це здається, що вам потрібно одночасно перебирати файл і файли в каталозі:

DIR=./thefiledir
while : ; do
    read -r oldfile <&3
    read -r newfile <&4
    if [ -z "$oldfile" -o -z "$newfile" ]; then
        break
    fi
    mv $oldfile $newfile
done 3< <( find $DIR -maxdepth 1 -type f | sort ) 4< filenames.txt

Я не знаю, чи є у вас ім'я filenames.txtфайлу у файлі, тому ви, можливо, захочете поставити echoперед mvрядком, щоб перевірити, що це буде робити те, що ви хочете.

Також я можу спробувати зробити це іншим способом ... Я не впевнений, як ви генеруєте файл із новими іменами, але, як підказує інша відповідь, ви можете перейти до файлу старих і нових імен або просто прочитати імена та застосуйте певну логіку для створення нових імен.

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