我想按文件日期的顺序重命名文件;例如:
file_1.pdf
file_2.pdf
至:
file_1_ONE.pdf
file_2._TWO.pdf
脚本必须将第一个文件重命名为按文件日期排序的“一个”文件。
发布于 2019-01-31 12:19:05
在某些BSD系统上使用zsh
shell和/usr/games
中的number
实用程序(例如,在Ubuntu上,这可以从bsdgames
包中获得):
number=1
for file in ./file_*.pdf(.Om); do
mv "$file" "${file%.pdf}_$(number -l "$number" | tr '[:lower:]' '[:upper:]').pdf"
number=$(( number + 1 ))
done
(.Om)
是特定于zsh
外壳的前一模式的修饰符。它使模式扩展为常规文件的文件名列表,该列表由mtime时间戳(最后一次修改的时间)以最老的文件排序。
命令number -l "$number" | tr '[:lower:]' '[:upper:]'
将调用当前值为$number
的number
,并以大写形式返回与其对应的英文单词,例如ONE
、TWO
、THREE
等。该命令将在文件名前加上没有文件名的后缀和下划线,并将字符串.pdf
添加到末尾。
或者,为了避免tr
:
number=1
for file in ./file_*.pdf(.Om); do
en_number=$(number -l "$number")
mv "$file" "${file%.pdf}_${en_number:u}.pdf"
number=$(( number + 1 ))
done
${en_number:u}
会将$en_number
(从number
输出)转换为大写。:u
修饰符是zsh
-specific,${variable:u}
对应于bash
中的${variable^^}
。
测试:
$ for name in file_{1..10}.pdf; do touch "$name"; sleep 2; done
$ ls -lt
total 4
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_10.pdf
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_9.pdf
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_8.pdf
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_7.pdf
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_6.pdf
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_5.pdf
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_4.pdf
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_3.pdf
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_2.pdf
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_1.pdf
-rw-r--r-- 1 kk wheel 163 Jan 31 13:26 script.sh
$ zsh script.sh
$ ls -lt
total 4
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_10_TEN.pdf
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_9_NINE.pdf
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_8_EIGHT.pdf
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_7_SEVEN.pdf
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_6_SIX.pdf
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_5_FIVE.pdf
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_4_FOUR.pdf
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_3_THREE.pdf
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_2_TWO.pdf
-rw-r--r-- 1 kk wheel 0 Jan 31 13:28 file_1_ONE.pdf
-rw-r--r-- 1 kk wheel 163 Jan 31 13:26 script.sh
发布于 2019-01-31 10:08:26
此脚本按创建时间顺序列出当前文件夹中每个文件的名称以及一个增加的计数器。更改echo
行以满足您的需要:)
#!/bin/bash
((counter=1))
for f in $(ls -1ct); do
echo $f-$counter
((counter+=1))
done
https://unix.stackexchange.com/questions/497874
复制相似问题