根据一种模式在Linux中重命名许多文件

问题描述

我最喜欢的解决方案是我自己的 重命名 脚本。映射到您的问题的最简单示例是:

% rename 's/_/-/g' *
% rename 's/(\p{Lower})(\p{Upper})/$1 $2/g' *

尽管我确实讨厌文件名中的空格,尤其是垂直空格:

 % rename 's/\s//g' *
 % rename 's/\v//g' *

等等。它基于The Larry Wall的脚本,但是扩展了选项,如下所示:

usage: /home/tchrist/scripts/rename [-ifqI0vnml] [-F file] perlexpr [files]
    -i          ask about clobbering existent files
    -f          force clobbers without inquiring
    -q          quietly skip clobbers without inquiring
    -I          ask about all changes
    -0          read null-terminated filenames
    -v          verbosely says what its doing 
    -V          verbosely says what its doing but with newlines between old and new filenames
    -n          don't really do it
    -m          to always rename
    -l          to always symlink
    -F path     read filelist to change from magic path(s)

如您所见,它不仅可以更改文件名,而且可以更改符号链接指向使用相同模式的位置。您不必使用一种s///模式,尽管通常使用一种模式。

目录中的其他工具主要用于Unicode工作,其中有些工具非常有用。

解决方法

我正在尝试使用mv命令执行三件事,但不确定是否可行?可能需要一个脚本。不知道怎么写。所有文件都在同一文件夹中。

1)以v9.zip结尾的文件应该只是.zip(已删除v9)

2)包含_的文件应为-

3)在大写字母旁边的小写字母(或小写字母旁边的大写字母)的文件之间应有一个空格。因此,MoveOverNow将变为“现在移过”,而ruNaway将变为ruN离开。[AZ]
[az]或[az] [AZ]变为[AZ] [az]和[az] [AZ]