Solusi 1:
Saya biasa menulis skrip perl untuk melakukan ini, sampai saya menemukan perintah rename.
Ia menerima perl regex untuk melakukan rename:
untuk ini, saya hanya mengetik dua perintah:
rename 's/(\w+)-(\w+)-(\d\d)-(\d{4})-NODATA.txt\$1.$4$3$2.log$//' *
rename 'y/A-Z/a-z/' *.log
Untuk beberapa distro, rename
tidak memiliki fungsi ini (lihat halaman manualnya), dan Anda mungkin harus memasang perl-rename
atau prename
.
Solusi 2:
mmv adalah utilitas linux standar untuk memindahkan/mengganti nama banyak file. Ini tersedia dari repo untuk sebagian besar distribusi. Untuk contoh Anda di atas, Anda dapat melakukan:
mmv '*-Log-*-*-*-NODATA.txt' '#l1.#4#3#2.log'
Untuk informasi selengkapnya, baca artikel debaday ini atau halaman manual.
Solusi 3:
Karena saya tidak memiliki perintah ganti nama, saya mengandalkan ini:
for myfile in /my/folder/*; do
target=$(echo $myfile|sed -e 's/foo/bar/g')
mv "$myfile" "$target"
done
Solusi 4:
rename
util tidak terlalu "standar". Setiap distro dikirimkan dengan rename
yang berbeda alat. Misalnya, di sini di Gentoo, rename
berasal dari sys-apps/util-linux
paket dan tidak mendukung regex.
Hamish Downer disarankan mmv
, tampaknya berguna, khususnya untuk digunakan di dalam skrip.
Di sisi lain, untuk kasus umum, Anda mungkin menginginkan renameutils. Ini memiliki qmv
dan qcp
perintah, yang akan membuka editor teks pilihan Anda (preferensi saya:Vim) dan memungkinkan Anda mengedit nama file tujuan di sana. Setelah menyimpan dan menutup editor, qmv
/qcp
akan melakukan semua penggantian nama.
Keduanya mmv
dan qmv
cukup pintar untuk mengganti nama file dalam urutan yang benar dan juga untuk mendeteksi penggantian nama melingkar, dan secara otomatis akan membuat file sementara jika diperlukan.