我想按文件日期的顺序重命名文件;例如:
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))
donehttps://unix.stackexchange.com/questions/497874
复制相似问题