web-dev-qa-db-fra.com

Un programme / commande pour aider à traduire plusieurs noms de fichiers

J'ai des centaines de fichiers avec des noms différents que je veux traduire dans une langue différente.

Existe-t-il une action/application CLI qui me permettrait de copier tous ces noms comme dans une liste/table et ensuite, après les avoir traduits, de les coller dans la liste/table, ou qui autoriserait une procédure similaire à " Renommer "à Thunar mais avec une action plus complexe plus proche de ce que j'ai décrit?

(Je suis à Lubuntu et je préfère ne pas utiliser Nautilus en raison d'interférences non désirées avec les ordinateurs de bureau LXDE/pcmanfm et LXPanel. S'il existe une solution dans Nautilus, fournissez-la, mais essayez de donner une alternative si possible.)

5
user47206

Le script ci-dessous, qui s’inspire d’une discussion différente ici , utilise translate-bin, le programme présenté dans cet article associé question , et traduit et renomme vos fichiers en un seul. aller. Il convient à la traduction par lots et au changement de nom de centaines de fichiers en une fois. Commencez par installer les programmes nécessaires à partir des référentiels avec:

Sudo apt-get install libtranslate0 libtranslate-bin

Le script est actuellement configuré pour renommer tous les fichiers portant l'extension .txt, mais il fonctionnera avec tout ce que vous voudrez: il suffit de changer toutes les instances de .txt en .jpg, .mp4 ou aux fichiers de votre choix lorsque vous souhaitez les traduire.

Le script est actuellement configuré pour traduire les noms de fichiers de l'allemand (de) vers le français (fr), mais vous pouvez choisir n'importe quelle langue prise en charge par le service (-s) utilisé. et comme ce service de traduction est actuellement Google, de nombreuses langues sont proposées.

Ouvrez votre éditeur de texte, sauvegardez le fichier puis rendez-le exécutable avec 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

Vous pouvez placer le script dans le dossier contenant les fichiers cibles, puis l'exécuter ou le placer dans votre dossier ~/bin, puis utiliser le terminal pour cd dans le dossier contenant les fichiers et appeler le script avec le nom que vous l'avez donné. Pour plus d'informations sur le dossier bin, voir ma réponse ici .

Voici un exemple où j'ouvre un terminal et cd dans le dossier cible:

Avant que le script ne soit exécuté, ls renvoie chien et chat en allemand:

Hund.txt  Katze.txt

et après l'exécution du script dans le terminal avec ./scriptname, le résultat de ls est dog and cat en français:

Chien.txt Chat.txt

Il est probablement préférable de sauvegarder vos fichiers avant d'utiliser le script, mais si une cible de traduction non valide telle que sgghdsgsh.txt est trouvée, le script ne fait rien, quelles que soient les langues définies. Cependant, pour empêcher le remplacement des fichiers, nous pouvons ajouter -i à mv: si vous cliquez dessus et que le fichier cible existe, rien ne se passera, mais si le script est exécuté dans le terminal avec ./script, il vous sera ensuite demandé de confirmer:

mv: `Cat.txt' and `Cat.txt' are the same file                                  
mv: overwrite `Cat.txt'? n  

Je ne pense pas qu'il soit nécessaire de mettre d'autres contrôles dans le script, donc cela devrait être satisfaisant.

Pour plus d'options, le programme est disponible à partir de man translate ou de pages de manuel Ubuntu en ligne .

9
user76204