Comment puis-je supprimer une extension spécifique à partir de fichiers de manière récursive à l'aide d'un script bash
J'essaie de trouver un script bash qui va de manière récursive rechercher des fichiers avec un .bx extension, et de supprimer cette extension. Les noms de fichiers sont en aucun format particulier (certains sont des fichiers cachés avec "." préfixe, certains ont des espaces dans le nom, etc.), et pas que tous les fichiers ont l'extension.
Je ne suis pas sûr de la façon de trouver chaque fichier avec l' .bx extension (dans et en-dessous de mon mdc) et le retirer. Merci pour l'aide!
- J'ai oublié de mentionner, l'exécution de ce sous OS X. tylerl la solution fonctionne très bien.
Vous devez vous connecter pour publier un commentaire.
"${NAME}" "${NAME%.bx}"
est mieux. Les noms de fichier peut contenir des espaces!rename
expédié sous Linux (centos 5.5) ne prend pas en charge les expressions régulières. Voir Raghuram de réponse pour une solution de travail.Bash 4+
En supposant que vous êtes dans le dossier où vous souhaitez faire de cette
for blah in *.bx ; do mv ${blah} ${blah%%.bx}
Voici une autre version qui effectue les opérations suivantes:
$old_ext
variable (à droite maintenant fixé à.bx
) et ci-dessouscwd
, les stocke dans$files
$new_ext
variable, actuellement fixé à.xyz
)Le script utilise
dirname
etbasename
pour trouver le fichier chemin d'accès et nom de fichier, respectivement.Supplémentaire: Comment faire pour supprimer toute extension de noms de fichiers
sera coupé à partir du dernier point, c'est à dire animal de compagnie.cat.chien ---> pet.chat
sera coupé à partir du premier point, à savoir animal de compagnie.cat.chien ---> pet
"-maxdepth 1" limites de fonctionnement de répertoire courant, "de type f" est utilisé pour sélectionner les fichiers uniquement. Sed & grep combinaison permet de choisir uniquement les noms de fichiers avec dot. Nombre de signes de pourcentage dans "mv" commande définir le réel point de coupe.
find . -maxdepth 1 -type f | sed 's/.\///g'| grep -E [.] | while read file; do mv $file ${file%.*}; done
(note de l'.
aprèsfind
).