Comment puis-je renommer tous les fichiers dans un répertoire spécifique où les fichiers contiennent des espaces vides et des caractères spéciaux ($ et @) dans leurs noms?
J'ai essayé la rename
commande comme suit pour remplacer tous les espaces et caractères spéciaux par un _:
$ ls -lrt
total 464
-rwxr-xr-x. 1 pmautoamtion pmautoamtion 471106 Jul 17 13:14 Bharti Blocked TRX Report Morning$AP@20150716.csv
$ rename -n 's/ |\$|@/_/g' *
$ ls -lrt
total 464
-rwxr-xr-x. 1 pmautoamtion pmautoamtion 471106 Jul 17 13:14 Bharti Blocked TRX Report Morning$AP@20150716.csv
$
La commande fonctionne mais n'apportera aucune modification dans les noms de fichiers et ne renverra pas non plus d'erreur. Comment résoudre ce problème et existe-t-il également d'autres moyens?
linux
shell-script
rename
Ankit Vashistha
la source
la source
Réponses:
Le
-n
drapeau est pourC'est donc normal si vous n'avez aucun changement.
Concernant votre commande, ça marche pour moi:
Selon votre coque, vous devrez peut-être échapper
Ou vous pouvez utiliser la
[…]
notation pour regrouper les caractères:la source
rename -n 's/./_/g' *
quelque chose?Vous pouvez essayer comme ceci:
Si vous êtes satisfait du résultat, supprimez l'
echo
avantmv
pour renommer les fichiers.la source
à 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 avait quelques problèmes mineurs entraînant:
résultant en:
@don_crissti: Il fait le hokus-pokus avec l'infile car linux aurait ses propres problèmes avec la gestion des caractères spéciaux lors du déplacement du nom de fichier.
la source
Étant donné que la
rename
commande n'a pas fonctionné pour moi pour des raisons inconnues et que je n'ai pas d'autre réponse à ma question, j'ai moi-même essayé de faire un effort pour rendre le changement de nom possible. Ce n'est peut-être pas la meilleure approche pour renommer les fichiers, mais cela a fonctionné pour moi et c'est pourquoi je voudrais l'afficher comme réponse afin que si quelqu'un d'autre lit cela puisse obtenir de l'aide pour changer les noms de fichiers comme je l'ai fait.Maintenant pour moi, je sais que tous les fichiers auront un texte spécifique dans leurs noms qui est le mot "Block". Voici les noms des fichiers avant leur changement de nom:
Maintenant, j'ai écrit un petit script shell pour rendre cela possible. Voici le code:
Et c'est tout, lorsque j'exécute le script, il renomme tous les noms de fichiers ayant des espaces vides (
) ou
$
ou@
avec_
au lieu de ces caractères.la source
cat foo | sed S1 | sed S2 | sed S3 >> bar
parsed -e S1 -e S2 -e S3 foo >> bar
sed 's/[ ()@$]/_/g'
oused 'y/ ()@$/_____/'
Celui-ci supprime simplement les caractères spéciaux des noms de fichiers
mettre
echo
après; do
pour tester avant, comme:Une autre solution:
-n
possibilité de tester avant.la source
Je cherche une solution à ce problème depuis un certain temps maintenant. Je travaille sur d'anciens systèmes fermés qui ne peuvent pas avoir de nouveaux packages installés. Je n'ai pas la
rename
commande. Enfin, j'ai écrit un script qui semble fonctionner avec tous les caractères spéciaux saisis au clavier.~@#$%^&*()-_=+[]{}\|;:",<.>?'
Le script renommera chaque fichier et répertoire du répertoire courant. Il remplacera tous les caractères spéciaux, sauf-_.
par le_
caractère. Laoutfile=
ligne peut être modifiée pour utiliser un caractère différent pour le remplacement si vous le souhaitez. Remplacez|_|
par|.|
pour utiliser le.
caractère par exemple.la source
Pour moi sur Ubuntu 18.04 LTS avec bash 4.4.20 (1) -release ce one-liner a bien fonctionné pour supprimer les espaces, @,: # ...
Pour tester (notez la
echo
commande:Éxécuter:
la source