我无法在shell中重命名图像序列。
我在模式myimage_001.jpg
之后有大约300个文件,我想将其转换为myimage.0001.jpg
,其中数字随每个文件递增。
这是我尝试过但没有成功(-n
标志在实际应用之前显示结果):
rename -n 's/_/./g' *.jpg
答案 0 :(得分:1)
您可以尝试以下内容:
for file in *.jpg; do
name="${file%_*}"
num="${file#*_}"
num="${num%.*}"
ext="${file#*.}"
mv "$file" "$(printf "%s.%04d.%s" $name $num $ext)"
done
这给出了:
$ ls
myimage_001.jpg myimage_002.jpg
$ for file in *.jpg; do
name="${file%_*}"
num="${file#*_}"
num="${num%.*}"
ext="${file#*.}"
mv "$file" "$(printf "%s.%04d.%s" $name $num $ext)"
done
$ ls
myimage.0001.jpg myimage.0002.jpg
答案 1 :(得分:1)
尝试此命令:
rename _ . *.jpg
示例:
> touch myimage_001.jpg
-rw-r--r-- 1 oracle oinstall 0 Mar 17 10:55 myimage_001.jpg
> rename _ . *.jpg
> ll
-rw-r--r-- 1 oracle oinstall 0 Mar 17 10:55 myimage.001.jpg
额外的0:
> touch myimage_001.jpg
-rw-r--r-- 1 oracle oinstall 0 Mar 17 10:55 myimage_001.jpg
> rename _ .0 *.jpg
> ll
-rw-r--r-- 1 oracle oinstall 0 Mar 17 10:55 myimage.0001.jpg
语法很简单:
rename 'old' 'new' 'data-source'
答案 2 :(得分:1)
另一种选择:
$ touch a.txt b.txt c.txt d.txt e.txt f.txt
$ ls
a.txt b.txt c.txt d.txt e.txt f.txt
我们可以使用ls
与sed
+ xargs
相结合来实现您的目标。
$ ls | sed -e "p;s/\.txt$/\.sql/"|xargs -n2 mv
$ ls
a.sql b.sql c.sql d.sql e.sql f.sql
有关详细信息,请参阅http://nixtip.wordpress.com/2010/10/20/using-xargs-to-rename-multiple-files/。