重命名目录中的文件


10

如何重命名目录中的文件,例如以下文件:PMC21375.pdf.txt,我需要重命名为 21375.txt。即,我需要同时从每个文件名中删除PMCpdf

Answers:


9

使用rename

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提示。这非常有用,您可以像我一样放置一些代码代替。

-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/renameperl's rename命令的路径。


最后但并非最不重要的一点是,该工具最初由Perl的父亲Larry Wall编写。


这不会.pdf从文件名中删除。
威廉·埃弗里特

帖子进行了相应的编辑。
吉尔·奎诺

5

除了重命名命令,您还可以直接在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从文件名中删除。
威廉·埃弗里特

你试过了吗?因为对我来说确实如此。显示在编辑中。
hmontoliu

我的错。我以为它将转换为大写字母。已投票。
威廉·埃弗里特

4

有几种用于重命名文件的实用程序,但是最容易使用的一种是rename。就您而言,您可以执行以下操作:

rename PMC '' *txt
rename .pdf '' *txt

第一个参数是文件名中要替换的部分。第二个参数是替换字符串。在这里,我''用来表示空字符串。以下所有参数都是要重命名的文件,这里我曾*txt将替换限制为文本文件。

rename如果您正在运行Linux,则应该已经存在。如果您正在运行* BSD或OS X,则可能必须先安装它。


我没关系说有一个GNU rename。有一个来自util-linux,一个来自perl具有不同语法的。你指的貌似从一个一个util-linux的是有时被称为rename.ul以免与被混淆renameperl,而在其它一些系统,rename是一个从UTIL-linux和从一个perlprename
斯特凡Chazelas

1
我的是util-linux中的一个。我错误地认为它是GNU coreutils的一部分。
wingedsubmariner 2013年

Debian的默认Debian版本将是这样,rename 's/PMC// *.txt并且rename s/\.pdf// *.txt
William Everett

1

首先备份您的文件!然后,基本上,您可以在当前目录中使用通用格式的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


0

尝试这个:

for i in *.pdf.txt; do j=${i//\.pdf/}; j=${j//PMC/}; mv $i $j; done

j=${i//\.pdf/}手段来替代.pdf$i什么也没有。同样,第二个j任务摆脱了PMC。


0

如果您正在使用zsh,这通常是用于zmv

zmv 'PMC(*).pdf.txt' '$1.txt'

zmv优雅地处理潜在的冲突)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.