Mengganti nama file dari daftar nama file

1

Saya masih sangat baru untuk shell scripting jadi saya yakin perintah ini semua salah. Saya mencoba mengubah nama folder file menjadi nama-nama di file txt. Prasyaratnya adalah filenames.txt dan file dalam folder sudah diatur untuk mencocokkan baris pertama dengan file pertama dalam sistem. Apa yang saya dapatkan adalah:

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

tapi itu tidak berhasil. Bisakah kalian membantu saya memperbaikinya?

Terima kasih

Drew
sumber

Jawaban:

2

Jika Anda tidak memiliki aturan algoritmik untuk mengubah nama file (yaitu Anda benar-benar membutuhkan file sebagai input), saya sarankan

  1. buat file txt dari daftar file yang ingin Anda ganti namanya, misalnya:

    Temukan . -nama "* .mkv"> files.txt

  2. edit file ini dan tambahkan nama baru setelah yang lama di setiap baris, mis

    ./myfirst.mkv ./mynewfirst.mkv

  3. memproses file ini:

    saat membaca baris; lakukan eval mv $ line; selesai <files.txt

tonioc
sumber
0

Saya mengambil inspirasi dari sini: https://unix.stackexchange.com/a/26604

Kedengarannya Anda perlu mengulang file sekaligus file dalam direktori pada saat yang bersamaan:

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

Saya tidak tahu apakah Anda memiliki nama direktori di filenames.txtfile, jadi Anda mungkin ingin meletakkan echosebelum mvbaris untuk menguji bahwa ini akan melakukan apa yang Anda inginkan.

Juga, saya mungkin mencoba melakukan ini dengan cara lain ... Saya tidak yakin bagaimana Anda membuat file dengan nama-nama baru, tetapi sebagai jawaban lain menyarankan, Anda dapat mengulangi file nama lama dan baru atau hanya membaca nama-nama dan menerapkan beberapa logika untuk membuat nama-nama baru.

Zerodiff
sumber