使用 9 位序列号对文件进行排序和重命名
Sort and rename files using a 9 digit sequence number
我想重命名目录中的多个 jpg 文件,使它们具有 9 位序列号。我还希望文件按日期从最旧到最新排序。我想到了这个:
ls -tr | nl -v 100000000 | while read n f; do mv "$f" "$n.jpg"; done
这会根据我的需要重命名文件,但序列号不跟在日期后面。我也试过
ls -tr | cat -n .....
但这不允许我指定起始序列号。
有什么建议我的语法有什么问题吗?
还有其他方法可以实现我的目标吗?
谢谢
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 指定起始序列号。但是,如果您的文件名中有空格,这将不起作用。
如果您的任何文件名包含空格,您可以使用以下内容:
i=100000000
find -type f -printf '%T@ %p[=10=]' | \
sort -zk1nr | \
sed -z 's/^[^ ]* //' | \
xargs -0 -I % echo % | \
while read f; do
mv "$f" "$(printf "%09d" $i).jpg"
let i++
done
注意这里没有使用ls
进行解析,而是在不同的命令中使用空字节作为字段分隔符,分别设置为[=12=]
、-z
、-0
.
find
命令打印文件时间和名称。
然后文件被 sort
ed 和 sed
删除时间戳。 xargs
通过 read
.
将文件名提供给 mv
命令
如果可以使用外部工具,您可以使用rnm:
rnm -ns '/i/.jpg' -si 100000000 -s/mt *.jpg
-ns
: 名称字符串(新名称)。
/i/
: Index (A name string rule).
-si
: 设置起始索引的选项。
-s/mt
:按照修改时间排序
如果你想要一个任意增量值:
rnm -ns '/i/.jpg' -si 100000000 -inc 45 -s/mt *.jpg
-inc
: 指定增量值。
我想重命名目录中的多个 jpg 文件,使它们具有 9 位序列号。我还希望文件按日期从最旧到最新排序。我想到了这个:
ls -tr | nl -v 100000000 | while read n f; do mv "$f" "$n.jpg"; done
这会根据我的需要重命名文件,但序列号不跟在日期后面。我也试过
ls -tr | cat -n .....
但这不允许我指定起始序列号。 有什么建议我的语法有什么问题吗? 还有其他方法可以实现我的目标吗? 谢谢
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 指定起始序列号。但是,如果您的文件名中有空格,这将不起作用。
如果您的任何文件名包含空格,您可以使用以下内容:
i=100000000
find -type f -printf '%T@ %p[=10=]' | \
sort -zk1nr | \
sed -z 's/^[^ ]* //' | \
xargs -0 -I % echo % | \
while read f; do
mv "$f" "$(printf "%09d" $i).jpg"
let i++
done
注意这里没有使用ls
进行解析,而是在不同的命令中使用空字节作为字段分隔符,分别设置为[=12=]
、-z
、-0
.
find
命令打印文件时间和名称。
然后文件被 sort
ed 和 sed
删除时间戳。 xargs
通过 read
.
mv
命令
如果可以使用外部工具,您可以使用rnm:
rnm -ns '/i/.jpg' -si 100000000 -s/mt *.jpg
-ns
: 名称字符串(新名称)。
/i/
: Index (A name string rule).
-si
: 设置起始索引的选项。
-s/mt
:按照修改时间排序
如果你想要一个任意增量值:
rnm -ns '/i/.jpg' -si 100000000 -inc 45 -s/mt *.jpg
-inc
: 指定增量值。