我有一个包含数百个文件的列表。它们目前如下:
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 前面的回显以实际执行移动(在您对脚本选择的文件感到满意之后)。