1 votes

Renommer les dossiers à partir du nom du fichier [script].

Je veux renommer chaque dossier avec le nom du seul fichier qu'il contient. Exemple :

Folder1/AAA.jpg
Folder2/BBB.jpg
FOlder3/CCC.jpg
Folder4/05.02.2019.jpg

to

AAA/AAA.jpg
BBB/BBB.jpg
CCC/CCC.jpg
05.02.2019/05.02.2019.jpg

Sous Windows, je peux le faire avec ce script dans un simple fichier batch :

for /d %%a in (*) do (
  for %%b in ("%%a\*.jpg","%%a\*.png") do (
     ren "%%a" "%%~nb"
  )
)

Dans Ubuntu j'ai essayé mais peut-être que j'écris une mauvaise syntaxe. Pouvez-vous m'aider ?

3voto

xenoid Points 4949

En supposant qu'ils sont tous dans le même répertoire parent :

for f in */*.jpg ; do mv "$(dirname "$f")" "$(basename "$f" .jpg)" ; done

Au ralenti :

  • */*.jpg énumérera Folder1/AAA.jpg , Folder2/BBB.jpg , FOlder3/CCC.jpg
  • $(dirname "$f") extraits Folder1 , Folder2 , FOlder3
  • "$(basename "$f" .jpg)" extrait le nom du fichier et laisse tomber l'extension : AAA , BBB , CCC ...
  • Donc vous vous retrouvez avec mv Folder1 AAA , mv Folder2 BBB ...

1voto

pa4080 Points 27038

Voici un bash script presque analogue :

#!/bin/bash
for i in Folder*/*
do
    FILE="$(basename "$i")"
    mv "$(dirname "$i")" "${FILE%.*}"
done

Exemple d'utilisation :

$ tree
.
 Folder1
    some name.png
 Folder2
     03.02.2019.jpg

2 directories, 2 files

$ for i in Folder*/*; do FILE="$(basename "$i")"; mv "$(dirname "$i")" "${FILE%.*}"; done

$ tree
.
 03.02.2019
    03.02.2019.jpg
 some name
     some name.png

2 directories, 2 files

Si vous devez vérifier si le extension es jpg o png :

#!/bin/bash
for i in Folder*/*
do
    if [[ $i =~ (jpg|png)$ ]]
    then
        FILE="$(basename "$i")"
        mv "$(dirname "$i")" "${FILE%.*}"
    fi
done

Vous pouvez supprimer la limitation du nom du répertoire en utilisant */* 代わりに Folder*/* . Vous pouvez également modifier la ligne correspondante en echo mv "$(dirname "$i")" "${FILE%.*}" pour un test de fonctionnement à sec.

Pour en savoir plus :

0voto

fooo Points 1

Ce bash script change les noms de dossiers.

#!/bin/bash
echo Enter old foldername
read oldfoldername
echo Enter new foldername
read newfoldername
mv $oldfoldername $newfoldername

Usage: bash {filename you copied script into}.sh

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X