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.
10
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.
.pdf
du nom de fichier.Outre la commande rename, vous pouvez le faire directement en bash (juste une façon parmi tant d'autres):
Édité pour montrer à Pinyaka comment cela fonctionne:
la source
.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: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.la source
rename
. Il y en a un deutil-linux
et un deperl
syntaxe différente. Celui dont vous parlez ressemble à celui deutil-linux
qui est parfois appelérename.ul
afin de ne pas être confondu avec lerename
fromperl
, tandis que sur certains autres systèmes,rename
c'est celui de util-linux et celui deperl
s'appelleprename
.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:
dans votre cas spécifique, vous pouvez l'utiliser deux fois:
pour supprimer
.pdf
et encore:pour supprimer
PMC
.la source
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.la source
Si vous utilisez
zsh
, c'est un travail typique pourzmv
:(
zmv
gère les conflits potentiels avec élégance).la source