Ganti nama dan balikkan penomoran daftar file

0

Di Linux, lebih disukai menggunakan bash, apa cara terbaik untuk mencapai tujuan di bawah ini?

Katakanlah saya memiliki serangkaian file bernomor

001.png, 002.png, 003.png

Apa cara terbaik untuk memindahkan / mengubah nama mereka menjadi dalam urutan terbalik?

Poin bonus: Saya memiliki serangkaian 1500 file, saya benar-benar ingin membalik urutan blok kedua sebanyak 40. Perhatikan bahwa huruf-huruf itu bukan bagian dari namanya. Saya menggunakannya untuk menunjukkan keunikan konten.

001a, 002b, ..., 040c <- leave as is
041a, 042b, ..., 080c <- reverse order of these files
081a, 082b, ..., 120c <- leave as is
121a, 122b, ..., 160a <- reverse order of these files

menjadi:

001a, 002b, ..., 040c
041c, 042b, ..., 080a
081a, 082b, ..., 120c
121c, 122b, ..., 160a
pengguna1611172
sumber

Jawaban:

0

Bagian "bonus" (bertindak hanya pada baris bernomor genap) adalah duplikat, dengan satu set jawaban di sini: https://unix.stackexchange.com/questions/26723/print-odd-numbered-lines-print-even -nomor-baris

Kent
sumber
Ini bukan jawaban penuh untuk pertanyaan itu. Itu hanya menjelaskan bagaimana bertindak pada setiap garis genap atau ganjil, tetapi tidak bagaimana melakukan penggantian nama. Juga, itu akan lebih disukai jika Anda meletakkan jawaban yang sebenarnya di sini, dan tidak hanya menautkan ke situs SE lain. Terima kasih.
slhck
Maaf ... Saya mengasumsikan OP memiliki file-nya terdaftar sedemikian rupa sehingga setiap output dari solusi diposting pada pertanyaan SE yang dapat dimasukkan ke dalam prosedur "terbalik", seperti yang Anda tulis di bawah ini. (Alih-alih images=(*.png), sesuatu seperti while read ; do images=$REPLY; .... doneakan beroperasi pada "setiap saluran lain"). Pemeriksaan lebih dekat menunjukkan bahwa daftar file mungkin tidak ada dalam file teks, jadi daripada membangun file semata-mata untuk tujuan melewatkan baris, mungkin lebih baik untuk membangun daftar 1-40, 81-120, dll untuk spesifik ini kasus.
Kent
0

Dengan asumsi file dinamai secara berurutan tanpa ada bagian yang hilang, dan tidak menggunakan apa pun selain angka sebelum ekstensi, ini adalah Bash murni (sejak 3.0).

Jalankan ini dari direktori gambar PNG di.

# create a temporary directory
mkdir -p ./tmp

# create an array of images and find maximum number
images=(*.png)
max=${#images[*]}

# loop through array keys and subtract the key from maximum number to reverse
for i in "${!images[@]}"; do 
  # rename to the temporary directory, with three-digit zero padding
  mv -- "${images[$i]}" ./tmp/$(printf "%03d.png" $(($max - i)))
done

# move files back and remove temporary directory
mv ./tmp/*.png .
rmdir ./tmp
slhck
sumber