Comme le titre le dit, comment puis-je changer l'extension de chaque fichier d'un répertoire dans Ubuntu? J'ai vu des exemples d'utilisation de renommer, etc., etc., mais j'obtiens une erreur (impossible de localiser le renommage du paquet) et elle n'est pas accessible via apt-get.
De plus, je ne connais pas vraiment le type de fichier d'origine! Ce sont des données qui ont été copiées du système de fichiers de Hadoop sur le lecteur local et j'ai besoin qu'elles soient toutes au format .txt.
Si cela fait une différence, j'utilise Ubuntu 12.04 dans Oracle Virtual Box.
Édition: Sortie de: ls -l/usr/bin/ renommer /etc/alternatives/renommer
amartin24@ubuntu-amartin24:~/TwitterMining/JSONTweets$ ls -l /usr/bin/*rename* /etc/alternatives/rename
ls: cannot access /etc/alternatives/rename: No such file or directory
-rwxr-xr-x 1 root root 10392 Mar 30 2012 /usr/bin/rename.ul
Vous pouvez cd
dans le répertoire en question et exécuter quelque chose de similaire à ceci:
find -L . -type f -name "*.oldextension" -print0 | while IFS= read -r -d '' FNAME; do
mv -- "$FNAME" "${FNAME%.oldextension}.newextension"
done
Ou si les fichiers n'ont aucune extension:
find -L . -type f -print0 | while IFS= read -r -d '' FNAME; do
mv -- "$FNAME" "${FNAME%}.newextension"
done
Dans votre cas, vous devrez remplacer newextension
par txt
.
Quelqu'un de plus compétent avec bash pourrait peut-être mieux décomposer cela. N'hésitez pas à éditer ma réponse dans ce cas.
Description originale:
1) Il renommera uniquement l'extension de fichier (en raison de l'utilisation de
${FNAME%.so}.dylib
). Toutes les autres solutions utilisant${X/.so/.dylib}
sont incorrectes car elles renomment à tort la première occurrence de.so
dans le nom du fichier (par exemple,x.so.so
est renommé enx.dylib.so
ou, pire,./libraries/libTemp.so-1.9.3/libTemp.so
est renommé en./libraries/libTemp.dylib-1.9.3/libTemp.so
- une erreur).2) Il gérera les espaces et tout autre caractère spécial dans les noms de fichiers (sauf les guillemets doubles).
3) Il ne changera pas de répertoires ni d’autres fichiers spéciaux.
4) Il suivra les liens symboliques dans les sous-répertoires et les liens vers les fichiers cibles et renommera le fichier cible, pas le lien lui-même (le comportement par défaut de find consiste à traiter le lien symbolique lui-même, pas le fichier pointé par le lien).
La source:
Extension de renommé Bash récursive - stackoverflow , répondu par aps2012 .
La commande rename
est déjà installée, vous n'avez rien d'autre à ajouter.
rename
prend le code Perl comme premier argument. La plupart des cas concrets de changement de nom consistent en un remplacement d'expressions rationnelles: s/REGEXP/REPLACEMENT/
. Pour supprimer l'extension existante, remplacez tout par le dernier caractère .
.
rename 's/\.[^.]*$/.txt/' /path/to/directory/*
Si vos fichiers n’ont pas d’extension (pas de nom .
dans leur nom), vous pouvez utiliser $
(qui correspond à la fin du nom du fichier) comme expression rationnelle ou ajouter .txt
à la fin du fichier. Nom.
rename '$_ = "$_.txt"' /path/to/directory/*
Cela ne change pas le contenu des fichiers, il les renomme seulement. Si vos données ne sont pas au format souhaité, il s'agit d'un problème totalement indépendant.
Je pense que vous pouvez utiliser ce script bash simple
rename_ext_script.sh
#!/bin/bash
for file in *
do
mv -- "${file}" "${file%.*}.txt"
done
ce script fonctionne pour les deux cas avec extension ou sans
Vue d'ensemble
Il existe un outil graphique très facile à utiliser et puissant dans le Centre logiciel Ubuntu pour renommer des lots de fichiers, pyRenamer.
Installation
Sudo apt-get install pyrenamer
ou
(source: buntu.com )
Captures d'écran
Si vous avez un tas de fichiers sans extension du tout (comme ./out_1
, ./out_2
, out_3
, ...):
cd YOUR_DIRECTORY_HERE
ls | xargs -i{} mv {} {}.YOUR_EXTENSION_HERE
exemple
ls | xargs -i{} mv {} {}.md
J'ai ce script. Je sais que ce n’est pas factice, à savoir lors du traitement de fichiers contenant des espaces. C'est pourquoi je lance la désintoxication au début.
#!/bin/bash
# detox *
# uncomment if you want to get rid of spaces and funny characters
script=$(basename $0)
if [ -z "$1" ] || [ "$1" == "-h" ] || [ "$1" == "--help" ]; then
clear
echo "Script for adding an extension to files without extension"
echo "---------------------------------------------------------"
echo -e "\n Usage:"
echo -e " $script extension\n"
echo -e "Exampli gratia: \n The command:"
echo " $script txt"
echo -e " will rename:\n FileWithoutExtension -> FileWithoutExtension.txt\n"
else
for file in $(ls -p -I '*.*' | grep -v '/$') # excludes direcotires
do
mv -iv "$file" "$file.$1"
done
fi