批量重命名文件根据分隔符重新排列文件名

时间:2016-11-30 18:06:16

标签: awk sed file-rename

我已经看到了接近这个的问题,但我还没有看到我需要的确切答案,似乎无法将我的脑袋缠绕在正则表达式,awk,sed,grep,重命名,我需要做到这一点发生。

我在一个目录中有文件,这些文件是从使用find piped to xargs创建的不同目录的多个子目录中顺序命名的。

我使用的命令:

find `<dir1>` -name "*.png" | xargs cp -t `<dir2>`

这导致第二个目录包含重复的文件名,顺序命名如下:

<name>。PNG
<name>。PNG。〜1〜
<name>。PNG。〜2〜
...
<name>。PNG。〜N〜

我想做的是将所有以〜*〜结尾的文件重命名,如下所示:

<name>。#。png其中'#“是文件名末尾”〜“之间的数字

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

使用Perl的rename(独立命令):

rename -nv 's/^([^.]+)\.(.+)\.~([0-9]+)~/$1.$3.$2/' *

如果一切正常,请删除选项-n

答案 1 :(得分:0)

可能有一种更简单的方法,但这是一个使用grepawk来实现您想要的小shell脚本

for i in $(ls|grep ".png."); do 
name=$(echo $i|awk -F'png' '{print $1}');
n=$(echo $i|awk -F'~' '{print $2}'); 
mv $i $name$n.png; 
done