GNU/Linux >> Tutoriels Linux >  >> Linux

Comment renommer tous les fichiers avec des caractères spéciaux et des espaces dans un répertoire ?

Le -n le drapeau est pour

--no-act

Aucune action :affiche les fichiers qui auraient été renommés.

Il est donc normal que vous n'ayez aucune modification.

Concernant votre commande, elle fonctionne pour moi :

$ touch "a @ test"
$ ls
a @ test
$ rename -n 's/ |\$|@/_/g' *
a @ test renamed as a___test

Peut-être que selon votre shell, vous devez échapper au |

$ rename -n 's/ \|\$\|@/_/g' *

Ou vous pouvez utiliser le […] notation pour grouper les caractères :

$ rename -n 's/[ @\$]/_/g' *

Vous pouvez essayer comme ceci :

for file in ./*Block*                                       
do echo mv "$file" "${file//[ ()@$]/_}"
done

Si vous êtes satisfait du résultat, supprimez le echo avant mv pour renommer les fichiers.


à la recherche d'un beau script pour supprimer les caractères spéciaux ainsi que les caractères spéciaux allemands, en les remplaçant par des caractères universels pour ne pas supprimer les informations utiles, j'ai mis à jour la dernière version du script qui présentait quelques problèmes mineurs entraînant :

#!/bin/bash

for file in ./*
do
  infile=`echo "${file:2}"|sed  \
         -e 's|"\"|"\\"|g' \
         -e 's| |\ |g' -e 's|!|\!|g' \
         -e 's|@|\@|g' -e 's|*|\*|g' \
         -e 's|&|\&|g' -e 's|]|\]|g' \
         -e 's|}|\}|g' -e 's|"|\"|g' \
         -e 's|,|\,|g' -e 's|?|\?|g' \
         -e 's|=|\=|g'  `
  outfileNOSPECIALS=`echo "${file:2}"|sed -e 's|[^A-Za-z0-9._-]|_|g'`
  outfileNOoe=`echo $outfileNOSPECIALS| sed -e 's|ö|oe|g'`
  outfileNOae=`echo $outfileNOoe| sed -e 's|ä|ae|g'`
  outfileNOue=`echo $outfileNOae| sed -e 's|ü|ue|g'`
  outfileNOOE=`echo $outfileNOue| sed -e 's|Ö|OE|g'`
  outfileNOAE=`echo $outfileNOOE| sed -e 's|Ä|AE|g'`
  outfileNOUE=`echo $outfileNOAE| sed -e 's|Ü|UE|g'`
  outfileNOss=`echo $outfileNOUE| sed -e 's|ß|ss|g'`
  outfile=${outfileNOss}
  if [ "$infile" != "${outfile}" ]
  then
        echo "filename changed for " $infile " in " $outfile
        mv "$infile" ${outfile}
  fi
done

exit

résultant en :

@don_crissti :Il fait le hokus-pokus avec l'infile puisque Linux aurait ses propres problèmes avec la gestion des caractères spéciaux lors du déplacement du nom de fichier.


Linux
  1. Comment supprimer tous les fichiers avec une extension particulière dans un dossier particulier ?

  2. Comment changer la propriété des fichiers et du répertoire avec la commande chown

  3. Comment rechercher tous les fichiers avec une taille de fichier de zéro (0) octet dans un répertoire de manière récursive

  4. Comment changer toutes les occurrences d'un mot dans tous les fichiers d'un répertoire

  5. Comment trouver tous les fichiers avec un répertoire parent particulier sous Linux ?

Comment manipuler les noms de fichiers contenant des espaces et des caractères spéciaux sous Linux

Renommer tous les fichiers et noms de répertoires en minuscules sous Linux

Comment renommer des fichiers et des répertoires sous Linux

Comment exclure des fichiers et des répertoires avec Rsync

Comment copier des fichiers et des répertoires sous Linux

Comment tarer les fichiers avec un ordre trié ?