Comment renommer des fichiers dans un répertoire tel que le fichier suivant:, PMC21375.pdf.txt
je dois être renommé en 21375.txt
. c'est-à-dire que je dois supprimer les deux PMC
et pdf
de chaque nom de fichier.
Comment renommer des fichiers dans un répertoire tel que le fichier suivant:, PMC21375.pdf.txt
je dois être renommé en 21375.txt
. c'est-à-dire que je dois supprimer les deux PMC
et pdf
de chaque nom de fichier.
Réponses:
rename 's/(PMC|\.pdf)//g' *pdf.txt
Démo:
$ ls *txt
PMC21375.pdf.txt
$ rename -n 's/(PMC|\.pdf)//g' *txt
PMC21375.pdf.txt -> 21375.txt
à l' shell
invite. C'est très utile, vous pouvez mettre du code Perl comme je le fais dans une substitution.
Vous pouvez supprimer le -n
(commutateur de mode de fonctionnement à sec) lorsque vos tests deviennent valides.
Il existe d'autres outils portant le même nom qui peuvent ou non être en mesure de le faire, alors soyez prudent.
Si vous exécutez la commande suivante ( linux
)
$ file $(readlink -f $(type -p rename))
et vous avez un résultat comme
.../rename: Perl script, ASCII text executable
alors cela semble être le bon outil =)
Sinon, pour en faire la valeur par défaut (généralement déjà le cas) sur Debian
et dérivé comme Ubuntu
:
$ sudo update-alternatives --set rename /path/to/rename
(remplacez /path/to/rename
le chemin de votre perl's rename
commande.
Enfin, cet outil a été écrit à l'origine par Larry Wall, le père de Perl.
Outre la commande rename, vous pouvez le faire directement en bash (juste une façon parmi tant d'autres):
for file in *pdf.txt; do mv $file ${file//[A-Z.]}.txt ; done
Édité pour montrer à Pinyaka comment cela fonctionne:
hmontoliu@ulises2:/tmp/foo$ touch PCM21375.pdf.txt PCM21376.pdf.txt
hmontoliu@ulises2:/tmp/foo$ ls
PCM21375.pdf.txt PCM21376.pdf.txt
hmontoliu@ulises2:/tmp/foo$ for file in *pdf.txt; do mv $file ${file//[A-Z.]}.txt ; done
hmontoliu@ulises2:/tmp/foo$ ls
21375.txt 21376.txt
.pdf
du nom de fichier.
Il existe plusieurs utilitaires pour renommer des fichiers, mais l'un des plus faciles à utiliser est rename
. Dans votre cas, vous pouvez probablement faire:
rename PMC '' *txt
rename .pdf '' *txt
Le premier paramètre est la partie du nom de fichier à remplacer. Le deuxième paramètre est la chaîne de remplacement. Ici, j'utilise ''
pour représenter la chaîne vide. Tous les paramètres suivants sont des fichiers à renommer, ici j'ai utilisé *txt
pour limiter le remplacement aux fichiers texte.
rename
devrait déjà être présent si vous utilisez Linux. Si vous utilisez un * BSD ou OS X, vous devrez peut-être d'abord l'installer.
rename
. Il y en a un de util-linux
et un de perl
syntaxe différente. Celui dont vous parlez ressemble à celui de util-linux
qui est parfois appelé rename.ul
afin de ne pas être confondu avec le rename
from perl
, tandis que sur certains autres systèmes, rename
c'est celui de util-linux et celui de perl
s'appelle prename
.
rename 's/PMC// *.txt
etrename s/\.pdf// *.txt
Faites d'abord une sauvegarde de vos fichiers! Ensuite, fondamentalement, vous pouvez utiliser un one-liner python dans le répertoire courant avec la forme générale:
python -c "import glob,os; [os.rename(fn, fn.replace('PATTERN', 'REPLACE')) for fn in glob.glob('PATH/*')]"
dans votre cas spécifique, vous pouvez l'utiliser deux fois:
python -c "import glob,os; [os.rename(fn, fn.replace('.pdf', '')) for fn in glob.glob('*')]"
pour supprimer .pdf
et encore:
python -c "import glob,os; [os.rename(fn, fn.replace('PMC', '')) for fn in glob.glob('*')]"
pour supprimer PMC
.
Essaye ça:
for i in *.pdf.txt; do j=${i//\.pdf/}; j=${j//PMC/}; mv $i $j; done
Les j=${i//\.pdf/}
moyens de se substituer .pdf
à $i
rien. De même avec la deuxième affectation j se débarrasser du PMC.
Si vous utilisez zsh
, c'est un travail typique pour zmv
:
zmv 'PMC(*).pdf.txt' '$1.txt'
( zmv
gère les conflits potentiels avec élégance).
.pdf
du nom de fichier.