Saya mendapat salinan video tutorial beserta subtitle-nya. Hanya saja subtitle tersebut ditambahi akhiran “_en” di setiap filenya.
Jadi misalnya ada tutorial01.mp4, tutorial02.mp4, maka nama subtitle-nya: tutorial01_en.srt, tutorial02_en.srt
Pemutar video otomatis akan membaca subtitle jika namanya sama dengan nama videonya, jadi nama subtitle harus diubah dengan menghapus akhiran “_en” tersebut.
Biasanya saya menggunakan duckduckgo untuk mencari script yang mirip kemudian dimodifikasi sesuai keperluan, tapi kali ini saya ingin menggunakan chatgpt, dan ini query yang saya berikan:
“how to rename files in bash to the same name with 3 last char removed, the extension is still the same. thank you”
Jawabnya:
You can use a for loop in Bash to rename files, removing the last three characters of the filename while keeping the extension intact. Here’s how you can do it:
for file in *; do
# Extract the base name (without extension)
base="${file%.*}"
# Extract the extension
ext="${file##*.}"
# Remove the last three characters from the base name
new_base="${base::-3}"
# Rename the file
mv "$file" "$new_base.$ext"
done
Silahkan di-query sendiri untuk mendapatkan penjelasan dari script tersebut.
Masalahnya, nama file yang akan diubah itu menggunakan spasi: “tutorial 01.srt”, “tutorial 02.srt”
Sehingga saya perlu bertanya lagi untuk medetilkan apa yang saya maksud:
“How if the file name has space?”
If the filenames contain spaces, you can modify the script to handle them correctly by using quotes around the variable names. Here’s the updated script:
for file in ; do # Check if it's a file (not a directory) if [ -f "$file" ]; then # Extract the base name (without extension) base="${file%.}"
# Extract the extension
ext="${file##*.}"
# Remove the last three characters from the base name
new_base="${base::-3}"
# Rename the file
mv "$file" "$new_base.$ext"
fi
done
Jadi script ini yang saya gunakan, saya ubah menjadi one liner
for file in .srt; do base=”${file%.}”; new_base=”${base::-3}” mv -v “$file” “$new_base.srt”; done
for file in * saya ganti menjadi for file in .srt karena saya hanya ingin memproses file dengan extensi srt. if [ -f “$file” ] saya hilangkan, karena .srt sudah pasti file, bukan folder. ext = “${file##.} juga saya hilangkan, karena extensi sudah ditetapkan pada for di atas
Dan saya baru tahu setelah menulis artikel ini bahwa dari jawaban pertama, chatgpt sudah meberi quote pada variable yang digunakan. =))
Update:
Saya baru ingat ada tool di Linux yang namanya rename!
Jadi bisa menggunakan one liner:
find . -type f -name "*_en.srt" -exec rename "_en.srt" ".srt" {} \;
-_-“