A program/command to help translate multiple file names
I have hundreds of files with different names that I want to translate into a different language.
Is there an application/CLI action that would allow me to copy all this names as in a list/table and then, after having translated them, to paste them back into the list/table, or that would allow a procedure somewhat similar to "Rename" in Thunar but with a more complex action closer to what I have described?
(I am in Lubuntu and I prefer not to use Nautilus due to unwanted interference with LXDE/pcmanfm desktop and LXPanel. If there is a solution in Nautilus please provide it but try to give an alternative if possible.)
The script below, which was inspired by a different discussion here, uses translate-bin
, the program featured in this related question, and translates and renames your files in one go. It is suitable for batch translating and renaming hundreds of files all in one go. First install the necessary programs from the repositories with:
sudo apt-get install libtranslate0 libtranslate-bin
The script is currently set to rename any files with the extension .txt
, but it will work with anything you might want: just change all the instances of .txt
to .jpg
, .mp4
or to whatever files you wish when you want to translate them.
The script is currently set to translate file names from German (de) to French (fr), but you can choose any language that is supported by the service (-s
) being used; and as that translation service is currently Google there are many language on offer.
Open your text editor, save the file and then make it executable with chmod u+x myscript
.
#!/bin/bash
for i in *.txt
do
mv -i "$i" "$(echo ${i%.txt} | translate-bin -s google -f de -t fr).txt";
done
You can place the script in the folder with the target files and then execute it, or place it in your ~/bin
folder and then use terminal to cd
to the folder with the files in and call the script with the name you have given it. For more on the bin folder, see my answer here.
Here is an example where I open terminal and cd
to the target folder:
Before the script runs, ls
returns dog and cat in German:
Hund.txt Katze.txt
and after the script has been executed in terminal with ./scriptname
, the output of ls
is dog and cat in French:
Chien.txt Chat.txt
It is probably best to backup your files before you use the script, but if an invalid translation target such as sgghdsgsh.txt
is found, the script does nothing whatever languages are set. However, to prevent it overwriting files we can add -i
to mv
: if clicked on and run and the target file exists, nothing will happen, but if the script is run in terminal with ./script
, you will then be asked to confirm:
mv: `Cat.txt' and `Cat.txt' are the same file
mv: overwrite `Cat.txt'? n
I don't think it's necessary to put any other checks in the script, so that should be satisfactory.
For more options for the program are available from man translate
or the Ubuntu manpages online.