![重命名目录中的文件](https://linux22.com/image/3473/%E9%87%8D%E5%91%BD%E5%90%8D%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%E6%96%87%E4%BB%B6.png)
如何重命名目录中的文件比如下面的文件:PMC21375.pdf.txt
,我需要重命名为 21375.txt
.即,我需要从每个文件名中删除PMC
和。pdf
答案1
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/rename
的路径。perl's rename
最后但并非最不重要的一点是,这个工具最初是由 Perl 之父 Larry Wall 编写的。
答案2
除了重命名命令之外,您还可以直接在 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
答案3
有多种用于重命名文件的实用程序,但最容易使用的实用程序之一是rename
.对于你的情况,你可能可以这样做:
rename PMC '' *txt
rename .pdf '' *txt
第一个参数是要替换的文件名部分。第二个参数是替换字符串。这里我用 来''
表示空字符串。以下参数都是要重命名的文件,这里我用来*txt
限制替换为文本文件。
rename
如果您运行的是 Linux,则应该已经存在。如果您运行的是 *BSD 或 OS X,则可能必须先安装它。
答案4
尝试这个:
for i in *.pdf.txt; do j=${i//\.pdf/}; j=${j//PMC/}; mv $i $j; done
手段以无j=${i//\.pdf/}
代替。同样,第二个 j 分配也摆脱了 PMC。.pdf
$i