Awk 批量重命名文件基于分隔符重新排列文件名

Awk 批量重命名文件基于分隔符重新排列文件名,awk,sed,file-rename,Awk,Sed,File Rename,我已经看到了一些与此相近的问题,但我还没有看到我需要的确切答案,而且似乎无法将我的头脑集中在正则表达式、awk、sed、grep、rename上,我需要实现这些问题 我在一个目录中有文件,这些文件是从使用find piped to xargs创建的不同目录的多个子目录中顺序命名的 我使用的命令: find `<dir1>` -name "*.png" | xargs cp -t `<dir2>` find``-name“*.png”| xargs cp-t`` 这导致

我已经看到了一些与此相近的问题,但我还没有看到我需要的确切答案,而且似乎无法将我的头脑集中在正则表达式、awk、sed、grep、rename上,我需要实现这些问题

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

我使用的命令:

find `<dir1>` -name "*.png" | xargs cp -t `<dir2>`
find``-name“*.png”| xargs cp-t``
这导致第二个目录包含重复的文件名,顺序命名如下:

.png
.png.~1~
.png.~2~

.png.~n~

我要做的是将所有以~*~结尾的文件重命名为:

.png此处的“#”是文件名末尾“~”之间的数字


任何帮助都将不胜感激。

使用Perl的
重命名(独立命令):


如果一切正常,请使用Perl的
重命名
(独立命令)删除选项
-n


如果一切看起来都很好,请删除选项
-n

可能有一种更简单的方法,但下面是一个使用
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

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

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

我应该在问题中提到我在寻找一行答案-Cyrus在上面提供的答案。我应该在问题中提到我在寻找一行答案-Cyrus在上面提供的答案。Cyrus为了进一步推进这一步,现在不管文件扩展名是什么,无论是png、jpg、jpeg、ico等,它都会uld使用正确的扩展名.Cyrus进一步推进这一步,现在不管文件扩展名是什么,无论是png、jpg、jpeg、ico等,它都将使用正确的扩展名。