Comment renommer des fichiers dans un répertoire tel que le fichier suivant:, PMC21375.pdf.txtje dois être renommé en 21375.txt. c'est-à-dire que je dois supprimer les deux PMCet pdfde chaque nom de fichier.
Comment renommer des fichiers dans un répertoire tel que le fichier suivant:, PMC21375.pdf.txtje dois être renommé en 21375.txt. c'est-à-dire que je dois supprimer les deux PMCet pdfde 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' shellinvite. 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 Debianet dérivé comme Ubuntu:
$ sudo update-alternatives --set rename /path/to/rename
(remplacez /path/to/renamele chemin de votre perl's renamecommande.
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
.pdfdu 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é *txtpour limiter le remplacement aux fichiers texte.
renamedevrait 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-linuxet un de perlsyntaxe différente. Celui dont vous parlez ressemble à celui de util-linuxqui est parfois appelé rename.ulafin de ne pas être confondu avec le renamefrom perl, tandis que sur certains autres systèmes, renamec'est celui de util-linux et celui de perls'appelle prename.
rename 's/PMC// *.txtetrename 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 .pdfet 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à $irien. 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'
( zmvgère les conflits potentiels avec élégance).
.pdfdu nom de fichier.