如何添加格式和批量重命名文件名?

问题描述 投票:0回答:2

我有大约7,000个.txt文件,这些文件已经被命名惯例明显破坏的程序吐出。唯一的优点是它们遵循以下结构:id,date,time。

m031060209104704.txt - > id:m031日期:060209时间:104704.txt

其他文件名的示例(同样的事情):

115-060202105710.txt - > id:115-日期:060202时间:105710.txt

x138051203125338.txt等......

9756060201194530.txt等..

我想重命名此目录中的所有7,000个文件,如下所示:

m031060209104704.txt - > 090206_104704_m031.txt

即date_time_id(每个由下划线或连字符分隔,我不介意)。我需要将日期格式从yymmdd切换到ddmmyy,如上图所示!

我不清楚这里有什么过度杀伤,完整的程序脚本或bash命令(MAC OS)。再一次,我不介意,任何和所有的帮助表示赞赏。

bash shell scripting file-rename batch-rename
2个回答
4
投票

尝试类似的东西:

#!/bin/bash

# directory to store renamed files
newdir="./renamed"
mkdir -p $newdir

for file in *.txt; do
    if [[ $file =~ ^(....)([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{6})\.txt$ ]]; then
        # extract parameters
        id=${BASH_REMATCH[1]}
        yy=${BASH_REMATCH[2]}
        mm=${BASH_REMATCH[3]}
        dd=${BASH_REMATCH[4]}
        time=${BASH_REMATCH[5]}

        # then rearrange them to new name
        newname=${dd}${mm}${yy}_${time}_${id}.txt

        # move to new directory
        mv "$file" "$newdir/$newname"
    fi
done

3
投票

Bash字符串索引使您可以非常轻松有效地重新编写文件名。您还应该验证您仅对20个字符的输入文件名进行操作。这可以完成如下:

#!/bin/bash

for i in *.txt; do
    ## validate a 20 character filename
    (( ${#i} == 20 )) || { printf "invalid length '%s'\n" "$i"; continue; }
    echo "mv $i ${i:8:2}${i:6:2}${i:4:2}_${i:10:6}_${i:0:4}.txt" ## output rename
    mv "$i" "${i:8:2}${i:6:2}${i:4:2}_${i:10:6}_${i:0:4}.txt"    ## actual rename
done

示例目录

$ ls -l
total 0
-rw-r--r--  1 david david    0 Dec 21 19:16 115-060202105710.txt
-rw-r--r--  1 david david    0 Dec 21 19:16 9756060201194530.txt
-rw-r--r--  1 david david    0 Dec 21 19:15 m031060209104704.txt
-rw-r--r--  1 david david    0 Dec 21 19:16 x138051203125338.txt

示例使用/输出

$ cd thedir
$ bash ../script.sh
mv 115-060202105710.txt 020206_105710_115-.txt
mv 9756060201194530.txt 010206_194530_9756.txt
mv m031060209104704.txt 090206_104704_m031.txt
mv x138051203125338.txt 031205_125338_x138.txt

$ ls -l
total 0
-rw-r--r-- 1 david david 0 Dec 21 19:42 010206_194530_9756.txt
-rw-r--r-- 1 david david 0 Dec 21 19:42 020206_105710_115-.txt
-rw-r--r-- 1 david david 0 Dec 21 19:42 031205_125338_x138.txt
-rw-r--r-- 1 david david 0 Dec 21 19:42 090206_104704_m031.txt

仔细看看,如果您有任何其他问题,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.