批量重命名文件根据分隔符重新排列文件名
bulk renaming files rearranging file names based on delimiter
我看到过与此接近的问题,但我没有看到我需要的确切答案,而且我似乎无法理解我需要的正则表达式、awk、sed、grep、重命名使其发生。
我在一个目录中有文件,这些文件按顺序从另一个目录的多个子目录中命名,这些子目录是使用管道到 xargs 的 find 创建的。
我使用的命令:
find `<dir1>` -name "*.png" | xargs cp -t `<dir2>`
这导致第二个目录包含重复的文件名,顺序命名如下:
<name>
.png
<name>
.png.~1~
<name>
.png.~2~
...
<name>
.png.~n~
我想做的是将所有以 ~*~ 结尾的文件重命名如下:
<name>
.#.png 其中“#”是文件名末尾“~”之间的数字
如有任何帮助,我们将不胜感激。
使用 Perl 的 rename
(独立命令):
rename -nv 's/^([^.]+)\.(.+)\.~([0-9]+)~/../' *
如果一切正常,请删除选项 -n
。
可能有更简单的方法,但这里有一个小 shell 脚本,使用 grep
和 awk
来实现您想要的
for i in $(ls|grep ".png."); do
name=$(echo $i|awk -F'png' '{print }');
n=$(echo $i|awk -F'~' '{print }');
mv $i $name$n.png;
done
我看到过与此接近的问题,但我没有看到我需要的确切答案,而且我似乎无法理解我需要的正则表达式、awk、sed、grep、重命名使其发生。
我在一个目录中有文件,这些文件按顺序从另一个目录的多个子目录中命名,这些子目录是使用管道到 xargs 的 find 创建的。
我使用的命令:
find `<dir1>` -name "*.png" | xargs cp -t `<dir2>`
这导致第二个目录包含重复的文件名,顺序命名如下:
<name>
.png
<name>
.png.~1~
<name>
.png.~2~
...
<name>
.png.~n~
我想做的是将所有以 ~*~ 结尾的文件重命名如下:
<name>
.#.png 其中“#”是文件名末尾“~”之间的数字
如有任何帮助,我们将不胜感激。
使用 Perl 的 rename
(独立命令):
rename -nv 's/^([^.]+)\.(.+)\.~([0-9]+)~/../' *
如果一切正常,请删除选项 -n
。
可能有更简单的方法,但这里有一个小 shell 脚本,使用 grep
和 awk
来实现您想要的
for i in $(ls|grep ".png."); do
name=$(echo $i|awk -F'png' '{print }');
n=$(echo $i|awk -F'~' '{print }');
mv $i $name$n.png;
done