Bagaimana saya bisa mengganti nama daftar file yang diurutkan dengan daftar nama file yang diurutkan?

2

Saya memiliki serangkaian file. Saya perlu menerapkan serangkaian nama file.

Begitu,

  • 001.jpg -> apple.jpg
  • 002.jpg -> banana.jpg
  • 003.jpg -> orange.jpg
  • dll.

Saya harus mengulangi ini untuk masing-masing 16 folder dengan 292 file per folder. File-file akan selalu berada dalam urutan nomor yang benar, tetapi tidak selalu nama yang sama (seri pertama akan menjadi 001.jpg-292.jpg, kemudian 293.jpg-584.jpg, dll.). Nama-nama yang disediakan akan sama untuk semua file dalam 16 folder.

Saya melihat ini mungkin (dan cukup mudah!) Dengan aplikasi seperti A Better Finder Rename , tapi saya tidak tertarik untuk menghabiskan $ 20 untuk semua fitur hanya untuk melakukan satu hal yang saya tidak harapkan akan pernah saya miliki untuk dilakukan lagi: D

Jadi, apakah ada beberapa opsi gratis, seperti Automator, Applescript, atau shell script?

Saya telah menemukan beberapa skrip shell yang mengulangi tindakan yang sama untuk semua file, tetapi saya tidak cukup tahu untuk mengeditnya dan memberikan nama baru untuk setiap operasi penggantian nama. :(

Bahkan jika saya harus membuat skrip yang panjangnya 292+ baris, dengan susah-susah memasukkan daftar nama ke dalamnya, itu akan lebih mudah daripada secara manual mengubah nama mereka semua menjadi satu per satu!

iynque
sumber

Jawaban:

1

Misalnya simpan file ini sebagai filenames.txt:

apple
banana
orange

Lalu lari:

a=($(<filenames.txt));for d in *;do i=0;for f in $d/*;do echo mv $f $d/${a[i++]}.jpg;done;done

Hapus echojika output terlihat benar.

Jika nama file berisi spasi, tambahkan IFS=$'\n';ke awal dan tambahkan tanda kutip ganda di sekitar variabel.

Lri
sumber
Terima kasih! Ini hampir berhasil. Satu-satunya masalah adalah, ia menggunakan nama depan di filenames.txt untuk semua 292 file! ... ada ide?
iynque
Apakah Anda mengubah direktori kerja ke folder yang berisi folder lain? Atau jika Anda perlu menjalankan skrip di setiap folder secara terpisah, hapus for d in *;bagian dan ;donedari akhir.
Lri
Saya memang mengedit perintah dan berakhir dengan output seperti "mv 001.jpg apple.jpg; mv 002.jpg apple.jpg; mv 003.jpg apple.jpg ..." dll.
iynque