重命名文件但在名称中保留文件原始时间戳

重命名文件但在名称中保留文件原始时间戳

我有一个包含数百个文件的列表。它们目前如下:

filename.New_20160901.dat
filename.New_20160902.dat
...

等等,一直到

filename.New_<current date>.dat

我有一个进程当前希望从登陆目录中获取文件,但文件名格式完全不同。

我想要做的是重命名文件但保留日期。例如,如果我要更改一个文件,它将是这样的:

$ mv filename.New_20160902.dat FILE_NAME_NEW.20160902.dat

对于一个文件来说很容易完成,但是我如何对一系列文件执行此操作。我想提取旧文件名的日期部分,将其存储为变量,并将mv旧文件存储到具有新文件名的新文件中,保持日期部分相同。

谢谢

答案1

尝试

rename -n s/filename.New_/FILE_NAME_NEW./ filename.New*

如果您同意建议的重命名,则无需运行-n

答案2

尝试这样的事情

for x in *; do
    mv "${x}" FILE_NAME_NEW."${x#filename.New_}"
done

echo在first前面使用mv,这样可以在重命名文件之前看到效果。 “${x}”是带有文件名的变量(例如filename.New_20160901.dat),“${x#filename.New_}”是删除的文件名(filename.New_如果它位于开头)(例如20160901.dat)。

答案3

要匹配包含时间戳的文件(而不是其他文件),请使用:

#!/bin/bash 

for x in filename.New_[0-9]*.dat; do
    echo "file --> $x"

    echo    mv "${x}" "${x/filename.New_/FILE_NAME_NEW.}"
done

删除 mv 前面的回显以实际执行移动(在您对脚本选择的文件感到满意之后)。

相关内容