Awk 批量重命名文件基于分隔符重新排列文件名
我已经看到了一些与此相近的问题,但我还没有看到我需要的确切答案,而且似乎无法将我的头脑集中在正则表达式、awk、sed、grep、rename上,我需要实现这些问题 我在一个目录中有文件,这些文件是从使用find piped to xargs创建的不同目录的多个子目录中顺序命名的 我使用的命令: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`` 这导致
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等,它都将使用正确的扩展名。