Ce que j'ai et que je veux réaliser:
Il y a des milliers d'images dans un dossier.
J'ai un fichier CSV avec les colonnes suivantes:
A: nom d'origine B: nom renommé
Une ligne typique ressemble à ceci:
"original-1.jpg","renamed-1.jpg"
"original-2.jpg","renamed-2.jpg"
Je peux enlever les guillemets, ce n'est pas un problème.
Maintenant, je veux utiliser une application ou exécuter un script qui va rechercher toutes les images de la colonne A et les renommer en noms dans la colonne B (par exemple, original-1.jpg -> renommé-1.jpg).
Il y a des réponses autour, e. g.:
http://ubuntuforums.org/showthread.php?t=1069652
http://systembash.com/content/one-line-batch-rename-files-using-csv-input-file-and-awk/
Cependant, certains scripts sont impliqués et je ne sais pas si tous ces scripts affectent uniquement le dossier dans lequel vous stockez le script ou s'ils peuvent renommer tous les fichiers du disque qui remplissent certaines conditions. Bien sûr, ce dernier doit être évité.
Ce que je recherche, c’est un guide simple sur la façon de renommer des fichiers et de choisir un dossier contenant des fichiers.
Merci d'avance.
Cela devrait fonctionner pour vous:
sed 's/"//g' files.csv | while IFS=, read orig new; do mv "$orig" "$new"; done
Explication:
sed 's/"//g' files.csv
: supprimer les guillemetsIFS=,
: fractionner l'entrée sur ,
while read orig new; do ... done
: Ceci lira chaque ligne d’entrée, la divisera sur la valeur de $IFS
(ici une virgule) et enregistrera le premier champ sous le nom $orig
et le reste sous le nom $new
.mv "$orig" "$new"
: ceci renommera les fichiers comme demandé.Si votre fichier ne contient que des noms de fichier (tels que orig.jpg
) et aucun chemin (pas /home/take2/orig.jpg
ou similaire), la commande ci-dessus n'affectera que les fichiers de votre répertoire actuel. Vous devez donc ouvrir un terminal, cd
, dans le répertoire cible et l'exécuter à cet emplacement.
Test d'abord:
Pour tester cela, vous pouvez faire un essai à sec en imprimant les commandes qui seront exécutées sans les exécuter réellement:
sed 's/"//g' files.csv | while IFS=, read orig new; do echo mv "$orig" "$new"; done