重命名之间插入的多个目录

重命名之间插入的多个目录

我有数百个目录需要重命名,如下所示:

from 15_öblös to 15_adj_öblös
from 14_kies to 14_adj_kies
and so on...

所以,我必须在数字和单词之间插入“adj”。

我做了什么,但做得并不好

for dic in [0-9]*
do
m=`echo "$dic" | cut -d"_" -f1`
l=`echo "$dic" | cut -d"_" -f2`
mv "$dic" "${m}_adj_${l}"
done 

答案1

Fedora、Debian 及其衍生产品(Ubuntu、Mint 等)默认安装了一个名为renameprename的 Perl 版本命令,可以为您执行此操作,其工作原理如下:

prename 's/_/_adj_/' *
# OR
rename 's/_/_adj_/' *

您可以执行更复杂的操作来查找和重命名文件,并具有更多控制权,例如:

prename 's/(\d+)_/$1_adj_/' *
# OR 
rename 's/(\d+)_/$1_adj_/' *

注意:对于prename,第一个参数是 Perl 代码。

答案2

我看不到你的脚本中的问题,但不知道你拥有的所有目录,我不知道你面临什么。但这样的事情可能会有所帮助:

find ./ -maxdepth 1 -type d | while read dirname
do
  newdirname=$(echo ${dirname} | sed -e "1,1s/_/_adj_/")
  mv ${dirname} ${newdirname}
done

答案3

在非嵌入式 Linux 系统上,您可以使用该rename命令,该命令非常简单,但对于这种情况来说已经足够了。要将当前目录中名称以数字开头的所有文件中的第一个替换_为:_adj

rename _ _adj_ [0-9]*

在 Debian 及其衍生版本(Ubuntu、Mint 等)上,此命令称为rename.ul.这些发行版的rename命令是一种不同的、更强大的命令,也称为prename;它的第一个参数是珀尔代码。替换__adj_

prename 's/_/_adj_/' [0-9]*

相关内容