如何重命名目录中的文件,例如以下文件:PMC21375.pdf.txt
,我需要重命名为 21375.txt
。即,我需要同时从每个文件名中删除PMC
和pdf
。
如何重命名目录中的文件,例如以下文件:PMC21375.pdf.txt
,我需要重命名为 21375.txt
。即,我需要同时从每个文件名中删除PMC
和pdf
。
Answers:
rename 's/(PMC|\.pdf)//g' *pdf.txt
演示:
$ ls *txt
PMC21375.pdf.txt
$ rename -n 's/(PMC|\.pdf)//g' *txt
PMC21375.pdf.txt -> 21375.txt
从shell
提示。这非常有用,您可以像我一样放置一些perl代码代替。
您-n
的测试变为有效时,可以删除(空运行模式开关)。
还有其他相同名称的工具可能无法执行此操作,因此请小心。
如果运行以下命令(linux
)
$ file $(readlink -f $(type -p rename))
结果是
.../rename: Perl script, ASCII text executable
那么这似乎是正确的工具=)
如果不是这样,则将其设为默认值(通常已经是这种情况)Debian
并派生为Ubuntu
:
$ sudo update-alternatives --set rename /path/to/rename
(替换/path/to/rename
为perl's rename
命令的路径。
最后但并非最不重要的一点是,该工具最初由Perl的父亲Larry Wall编写。
除了重命名命令,您还可以直接在bash中执行它(只是许多方法之一):
for file in *pdf.txt; do mv $file ${file//[A-Z.]}.txt ; done
编辑以显示Pinyaka如何工作:
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
从文件名中删除。
有几种用于重命名文件的实用程序,但是最容易使用的一种是rename
。就您而言,您可以执行以下操作:
rename PMC '' *txt
rename .pdf '' *txt
第一个参数是文件名中要替换的部分。第二个参数是替换字符串。在这里,我''
用来表示空字符串。以下所有参数都是要重命名的文件,这里我曾*txt
将替换限制为文本文件。
rename
如果您正在运行Linux,则应该已经存在。如果您正在运行* BSD或OS X,则可能必须先安装它。
rename
。有一个来自util-linux
,一个来自perl
具有不同语法的。你指的貌似从一个一个util-linux
的是有时被称为rename.ul
以免与被混淆rename
的perl
,而在其它一些系统,rename
是一个从UTIL-linux和从一个perl
叫prename
。
rename 's/PMC// *.txt
并且rename s/\.pdf// *.txt
首先备份您的文件!然后,基本上,您可以在当前目录中使用通用格式的python one-liner:
python -c "import glob,os; [os.rename(fn, fn.replace('PATTERN', 'REPLACE')) for fn in glob.glob('PATH/*')]"
在您的特定情况下,您可以使用两次:
python -c "import glob,os; [os.rename(fn, fn.replace('.pdf', '')) for fn in glob.glob('*')]"
.pdf
再次删除:
python -c "import glob,os; [os.rename(fn, fn.replace('PMC', '')) for fn in glob.glob('*')]"
去除PMC
。
.pdf
从文件名中删除。