我已经看到了接近这个的问题,但我还没有看到我需要的确切答案,似乎无法将我的脑袋缠绕在正则表达式,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其中'#“是文件名末尾”〜“之间的数字
任何帮助都将不胜感激。
答案 0 :(得分:0)
使用Perl的rename
(独立命令):
rename -nv 's/^([^.]+)\.(.+)\.~([0-9]+)~/$1.$3.$2/' *
如果一切正常,请删除选项-n
。
答案 1 :(得分:0)
可能有一种更简单的方法,但这是一个使用grep
和awk
来实现您想要的小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