Rts*_*e42 6 directory rename batch
我有一些文件夹叫做:
Session 1
Session 2
Session 3
Session 4
Session 5
Session 6
Session 7
Session 8
Run Code Online (Sandbox Code Playgroud)
我想将它们全部重命名为:
Folder 1
Folder 2
Folder 3
Folder 4
Folder 5
Folder 6
Folder 7
Folder 8
Run Code Online (Sandbox Code Playgroud)
我将如何以最有效的方式在终端中执行此操作?
我知道mmv mv和rename,但不知道我应该用什么以及如何去做。
Ser*_*nyy 16
最简单的方法是使用renameor prename,它是一个 Perl 脚本(如果你是一个ksh或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/
Run Code Online (Sandbox Code Playgroud)
如果您需要递归搜索或确保找到正确类型的项目(也许您的文件名中还有带有“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/
Run Code Online (Sandbox Code Playgroud)
有点冗长,可能有点多余,但有效。
一个小问题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/
Run Code Online (Sandbox Code Playgroud)
你在这里看到的是,我们正在循环所有包含单词的项目Session并且是目录。我们使用参数扩展`${dir##*\ }" 提取目录名称中空格后的所有内容(即相应的数字),并形成新的字符串“文件夹/”。
在这两个prename命令中,mv我们都使用了 globbing,这意味着这些方法将重命名每个包含“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/
Run Code Online (Sandbox Code Playgroud)