我有数百个目录需要重命名,如下所示:
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 等)默认安装了一个名为rename
或prename
的 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]*