由于下载的很多资源的名称都有一些奇奇怪怪的平台前缀linux 批量修改 文件名,存储备份的时候就想弄掉这些前缀,美观一些。所以需要一个方法来实现批量并且快速处理。这显然是图形界面无法做到的,就必须使用命令行了。为了多平台都会用linux命令ls,就研究了Windows和Linux两个平台的操作方法,macOS可以使用Linux的方法。
需要注意的是,使用命令做这些之前最好先将两个文件移到单独的文件夹下,然后对他们做实验,以免更加乱糟糟的了!!!
Windows
Windows中,命令提示符批量修改文件名称没有直接的方法,需要写一个脚本,这样太麻烦了,不考虑它。但是Windows PowerShell可以比较简单的做到。
为了方便演示,准备有以下文件:ab.test1.txt、ab.test2.txt、test3.txt和test4.txt。
假设我们需要删除掉部分文件名称里的ab.前缀。我们可以使用以下命令(也是官方推荐的):
Get-ChildItem | Rename-Item -NewName {$_.name -replace "ab.",""}
或者更简单一点的,将Get-ChildItem替换成ls:
ls | Rename-Item -NewName {$_.name -replace "ab.",""}
这些命令会对当前目录下所有的文件进行操作。 这时候查看就可以看到当前目录下所有的文件都修改好啦ubuntu linux,如下:
但是这里需要注意一点,直接匹配替换只能替换设定好的部分,只替换包含了这部分内容的。其实这样也方便了使用。 举个例子来说明以下,我们还是替换那四个文件,这次直接只留下数字编号,其余前缀全部删除。
我们可以看到只修改了ab.test前缀的文件。
除此之外还要考虑到扩展带来的识别问题。例如删除[ab.n]前缀的话linux 批量修改 文件名,会因为中括号,将其识别成正则表达式,并且由于里面带有.字符,而把文件扩展名的.一起删除,而且不会删除中括号本身。这样会有点麻烦。
解决方法是:先不带左中括号进行替换,这是因为PowerShell是通过左中括号来判断是不是正则表达式的。然后再用正则表达式删除左中括号。流程如下:
Linux
Linux中做到这个简直是太简单了。使用以下命令即可:
rename 's/被替换的字符/替换的字符/' *.txt
这里不论是被替换的字符和替换的字符都不需要加引号,只需要放在三个斜杠之间。*.txt表示需要修改文件名称的文件,星号*表示任意字符,那么这里表示所有.txt后缀的文件。
例如想删除test1.txt、test2.txt、test3.txt和test4.txt的test前缀,使用rename 's/test//' *.txt就好,演示如下:
zhonguncle@ubuntu:~/files$ ls
test1.txt test2.txt test3.txt test4.txt
zhonguncle@ubuntu:~/files$ rename 's/test//' *.txt
zhonguncle@ubuntu:~/files$ ls
1.txt 2.txt 3.txt 4.txt
那么遇到中括号这种情况,也可以非常简单的通过反斜杠来将元字符转换成文字字符处理。例如Windows中遇到的那个情况,只需要以下操作即可:
zhonguncle@ubuntu:~/files$ ls
'[ab.n]test1.txt' '[ab.n]test2.txt' test3.txt test4.txt
zhonguncle@ubuntu:~/files$ rename 's/[ab.n]//' *.txt
zhonguncle@ubuntu:~/files$ ls
test1.txt test2.txt test3.txt test4.txt
只通过简单的rename 's/[ab.n]//' *.txt就可以做到啦,不需要几步操作来实现这一点。
研究Windows的方法花了一点时间,希望能帮到有需要的人!