首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用9位序列号对文件进行排序和重命名

使用9位序列号对文件进行排序和重命名
EN

Stack Overflow用户
提问于 2017-02-27 13:29:33
回答 3查看 933关注 0票数 1

我想重命名一个目录中的多个jpg文件,以便它们有9位序列号。我也希望文件按日期排序,从最老到最新。我想出了这个:

代码语言:javascript
复制
ls -tr | nl -v 100000000 | while read n f; do mv "$f" "$n.jpg"; done

这会将文件重命名为我想要的,但是序列号不跟随日期。我也试过

代码语言:javascript
复制
ls -tr | cat -n .....

但这不允许我指定起始序列号。有什么建议吗?我的语法有什么问题?还有其他方法来实现我的目标吗?谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-02-27 15:15:42

如果您的任何文件名包含空白,则可以使用以下内容:

代码语言:javascript
复制
i=100000000
find -type f -printf '%T@ %p\0'  | \
sort -zk1nr | \
sed -z 's/^[^ ]* //' | \
xargs -0 -I % echo % | \
while read f; do 
   mv "$f" "$(printf "%09d" $i).jpg"
   let i++
done

请注意,这并不使用ls进行解析,而是在不同的命令中使用空字节作为字段分隔符,分别设置为\0-z-0

find命令与名称一起打印文件时间。然后文件被sort编辑,sed移除时间戳。xargs是通过read将文件名交给mv命令。

票数 0
EN

Stack Overflow用户

发布于 2017-02-27 13:51:52

代码语言:javascript
复制
DIR="/tmp/images"
FILELIST=$(ls -tr ${DIR})
n=1
for file in ${FILELIST}; do
    printf -v digit "%09d" $n
    mv "$DIR/${file}" "$DIR/${digit}.jpg"
    n=$[n + 1]
done

像这样吗?然后您可以使用n来指定起始序列号。但是,如果您的文件名中有空格,这将无法工作。

票数 0
EN

Stack Overflow用户

发布于 2017-02-27 17:12:54

如果可以使用外部工具,则可以使用rnm

代码语言:javascript
复制
rnm -ns '/i/.jpg' -si 100000000 -s/mt *.jpg

-ns:名称字符串(新名称)。

/i/:索引(名称字符串规则)。

-si:设置起始索引的选项。

-s/mt:根据修改时间进行排序。

如果您想要一个任意的增量值:

代码语言:javascript
复制
rnm -ns '/i/.jpg' -si 100000000 -inc 45 -s/mt *.jpg

-inc:指定一个增量值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42487028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档