我想重命名名为的cca 1000文件: 66-123123.jpg - > ABC-123123-66.jpg。所以一般的文件格式是: xx-yyyyyy.jpg - > abc-yyyyyy-xx.jpg,其中xx和yyyyyy是数字,abc是字符串。 有人可以帮助我使用bash或py脚本吗?
答案 0 :(得分:1)
for file in ??-??????.jpg ; do
[[ $file =~ (..)-(......)\.jpg ]]
mv "$file" "abc-${BASH_REMATCH[2]}-${BASH_REMATCH[1]}.jpg" ;
done
这需要使用bash 4进行正则表达式支持。对于POSIXy shell,这将执行
for f in ??-??????.jpg ; do
g=${f%.jpg} # remove the extension
a=${g%-*} # remove the trailing "-yyyyyy"
b=${g#*-} # remove the leading "xx-"
mv "$f" "abc-$b-$a.jpg" ;
done
答案 1 :(得分:1)
尝试这样做:
rename 's/(\d{2})-(\d{6})\.jpg/abc-$2-$1.jpg/' *.jpg
warning http://pix.toile-libre.org/upload/original/1377510865.png 还有其他同名工具可能会或可能不会这样做,所以要小心。
如果您运行以下命令(linux
)
$ file $(readlink -f $(type -p rename))
你有一个像
的结果.../rename: Perl script, ASCII text executable
然后这似乎是正确的工具=)
如果没有,请将其设为Debian
上的默认值(通常已经是这种情况)和Ubuntu
之类的衍生物:
$ sudo update-alternatives --set rename /path/to/rename
(将/path/to/rename
替换为perl's rename
命令的路径。
如果您没有此命令,请搜索您的包管理器进行安装或do it manually。
最后但同样重要的是,这个工具最初是由Perl的父亲Larry Wall编写的。
答案 2 :(得分:0)
您可以使用rename
命令,该命令使用正则表达式重命名多个文件。在这种情况下,你想写
rename 's/(\d\d)-(\d\d\d\d\d\d)/abc-$2-$1/' *
其中\d
表示数字,$1
和$2
表示第一个和第二个括号匹配的值。
答案 3 :(得分:0)
能够轻松地完成这样的事情,就是我按照我的方式命名文件的原因。使用+符号可以让我将它们全部切换成变量,然后我可以用echo重新排列它们。
#!/usr/bin/env bash
set -x
find *.jpg -type f | while read files
do
newname=$(echo "${files}" | sed s'@-@+@'g | sed s'@\.jpg@+.jpg@'g)
field1=$(echo "${newname}" | cut -d'+' -f1)
field2=$(echo "${newname}" | cut -d'+' -f2)
field3=$(echo "${newname}" | cut -d'+' -f3)
finalname=$(echo "abc-${field2}-${field1}.${field3}")
mv "${files}" "${finalname}"
done