我有一些文件夹叫做:
Session 1
Session 2
Session 3
Session 4
Session 5
Session 6
Session 7
Session 8
我想将它们全部重命名为:
Folder 1
Folder 2
Folder 3
Folder 4
Folder 5
Folder 6
Folder 7
Folder 8
我将如何以最有效的方式在终端上执行此操作?
我知道mmv
mv
和rename
,但不知道我应该用什么以及如何去做。
最简单的方法是使用rename
or prename
,这是一个Perl脚本(如果您是aksh
或mksh
用户,则该shell具有rename
内置功能,该功能是不同的,因此为了保持一致,我将prename
在引用该Perl时使用脚本;或者,您可以调用/usr/bin/rename
-可执行文件的完整路径)。
$ ls
Session 1/ Session 2/ Session 3/ Session 4/ Session 5/ Session 6/ Session 7/ Session 8/
$ prename 's/Session/Folder/' Session*/
$ ls
Folder 1/ Folder 2/ Folder 3/ Folder 4/ Folder 5/ Folder 6/ Folder 7/ Folder 8/
如果您需要递归搜索或确保找到正确的项目类型(也许您的文件名中还包含带有单词“ Session”的文件),则可以将其与find
实用程序结合使用:
$ ls
Folder 1/ Folder 2/ Folder 3/ Folder 4/ Folder 5/ Folder 6/ Folder 7/ Folder 8/
$ find -maxdepth 1 -type d -name "Session *" -exec prename 's/Session/Folder/' {} \;
$ ls
Folder 1/ Folder 2/ Folder 3/ Folder 4/ Folder 5/ Folder 6/ Folder 7/ Folder 8/
稍长,也许有点多余,但是可以。
一个小问题mv
是,我们每次都需要更改目的地的名称,因此,它本身无法完成我们想要的操作。为此,我们必须将其与其他工具(例如find
或bash
的工具)结合使用。
$ ls
Session 1/ Session 2/ Session 3/ Session 4/ Session 5/ Session 6/ Session 7/ Session 8/
$ for dir in Session*/ ; do mv "${dir}" "Folder ${dir##*\ }" ;done
$ ls
Folder 1/ Folder 2/ Folder 3/ Folder 4/ Folder 5/ Folder 6/ Folder 7/ Folder 8/
您在此处看到的是,我们正在遍历其中包含单词Session
且为目录的所有项目。我们使用参数扩展`$ {dir ## * \}“提取目录名称(相应编号)中空格之后的所有内容,并形成新字符串” Folder /“。
在这两个prename
命令中,mv
我们使用的是通配符,这意味着这些方法将重命名其中包含单词“ Session”的每个目录,甚至是“ Session blah”。当然,这不是理想的选择,但是对于您知道文件夹命名是一致的特定情况,它将起作用。或者,我们可以使用扩展命令for dir in Session\ [1-9] ; do . . .done
。
换句话说,这种方法可以工作,但是非常简单,也不是最好的方法。
当然,也可以使用其他工具。例如,Python:
$ ls
Session 1/ Session 3/ Session 5/ Session 7/
Session 2/ Session 4/ Session 6/ Session 8/
$ python -c 'import os,shutil;map(lambda x:shutil.move(x,x.replace("Session","Folder")),os.listdir("."))'
$ ls
Folder 1/ Folder 2/ Folder 3/ Folder 4/ Folder 5/ Folder 6/ Folder 7/ Folder 8/
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句