So benennen Sie Dateien in einem Verzeichnis wie der folgenden um: PMC21375.pdf.txt
Ich muss umbenannt werden in 21375.txt
. dh ich muss beide PMC
und pdf
von jedem Dateinamen entfernen .
So benennen Sie Dateien in einem Verzeichnis wie der folgenden um: PMC21375.pdf.txt
Ich muss umbenannt werden in 21375.txt
. dh ich muss beide PMC
und pdf
von jedem Dateinamen entfernen .
Antworten:
rename 's/(PMC|\.pdf)//g' *pdf.txt
Demo:
$ ls *txt
PMC21375.pdf.txt
$ rename -n 's/(PMC|\.pdf)//g' *txt
PMC21375.pdf.txt -> 21375.txt
von der shell
Eingabeaufforderung. Es ist sehr nützlich, Sie können einen Perl- Code wie ich in eine Substitution einfügen.
Sie können den -n
Schalter (Trockenlaufmodus) entfernen, wenn Ihre Tests gültig werden.
Es gibt andere Tools mit demselben Namen, die dies möglicherweise können oder nicht. Seien Sie also vorsichtig.
Wenn Sie den folgenden Befehl ausführen ( linux
)
$ file $(readlink -f $(type -p rename))
und du hast ein Ergebnis wie
.../rename: Perl script, ASCII text executable
dann scheint dies das richtige Werkzeug zu sein =)
Wenn nicht, um es zum Standard (normalerweise bereits der Fall) zu machen Debian
und abzuleiten wie Ubuntu
:
$ sudo update-alternatives --set rename /path/to/rename
(Ersetzen Sie /path/to/rename
den Pfad Ihres perl's rename
Befehls.
Last but not least wurde dieses Tool ursprünglich von Larry Wall, dem Vater des Perl, geschrieben.
Neben dem Umbenennungsbefehl können Sie dies direkt in bash tun (nur eine von vielen Möglichkeiten):
for file in *pdf.txt; do mv $file ${file//[A-Z.]}.txt ; done
Bearbeitet, um Pinyaka zu zeigen, wie es funktioniert:
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
aus dem Dateinamen entfernt.
Es gibt verschiedene Dienstprogramme zum Umbenennen von Dateien, aber eines der am einfachsten zu verwendenden ist rename
. In Ihrem Fall können Sie wahrscheinlich Folgendes tun:
rename PMC '' *txt
rename .pdf '' *txt
Der erste Parameter ist der Teil des Dateinamens, der ersetzt werden soll. Der zweite Parameter ist die Ersatzzeichenfolge. Hier verwende ich ''
, um die leere Zeichenfolge darzustellen. Alle folgenden Parameter sind Dateien, die umbenannt werden müssen. Hier habe ich *txt
das Ersetzen auf Textdateien beschränkt.
rename
sollte bereits vorhanden sein, wenn Sie Linux ausführen. Wenn Sie ein * BSD oder OS X ausführen, müssen Sie es möglicherweise zuerst installieren.
rename
. Es gibt eine von util-linux
und eine von perl
mit unterschiedlicher Syntax. Dasjenige, auf das Sie sich beziehen, sieht aus wie das von util-linux
, das manchmal aufgerufen wird rename.ul
, um nicht mit dem rename
von verwechselt zu werden perl
, während auf einigen anderen Systemen rename
das von util-linux und das von von perl
aufgerufen wird prename
.
rename 's/PMC// *.txt
undrename s/\.pdf// *.txt
Erstellen Sie zuerst eine Sicherungskopie Ihrer Dateien! Dann können Sie im Grunde genommen einen Python-Einzeiler im aktuellen Verzeichnis mit der allgemeinen Form verwenden:
python -c "import glob,os; [os.rename(fn, fn.replace('PATTERN', 'REPLACE')) for fn in glob.glob('PATH/*')]"
In Ihrem speziellen Fall können Sie dies zweimal verwenden:
python -c "import glob,os; [os.rename(fn, fn.replace('.pdf', '')) for fn in glob.glob('*')]"
zu entfernen .pdf
und noch einmal:
python -c "import glob,os; [os.rename(fn, fn.replace('PMC', '')) for fn in glob.glob('*')]"
zu entfernen PMC
.
Versuche dies:
for i in *.pdf.txt; do j=${i//\.pdf/}; j=${j//PMC/}; mv $i $j; done
Die j=${i//\.pdf/}
Mittel zu ersetzen , .pdf
in $i
nichts. Ebenso mit der zweiten j-Aufgabe, die PMC loszuwerden.
Wenn Sie verwenden zsh
, ist dies ein typischer Job für zmv
:
zmv 'PMC(*).pdf.txt' '$1.txt'
( zmv
Behandelt potenzielle Konflikte ordnungsgemäß).
.pdf
aus dem Dateinamen entfernt.