移动通配符文件并添加时间戳

移动通配符文件并添加时间戳

要求是将文件从源移动到存档文件夹并添加时间戳我已经创建了以下脚本,但它没有移动我作为通配符传递的日期

File name: Test_20100101.txt
sourcedir=/projects/source
archivedir=/projects/archive
FILE="$1"

for file in $1; do
    fileroot=$1
  mv -i "$sourcedir/$1"* "$archivedir/$1_$(date +"%Y%m%d_%H%M%S")"
done

执行时我正在运行如下脚本

./archfiles.sh Test_

但输出如下

Test__20200107_092902

实际输出应该是

Test_20100101_20200107_092902.txt

你能帮我解决这个问题吗

答案1

for当不使用循环变量时,使用循环是没有意义的file。如果要逐一处理通配符扩展中的文件,则必须在语句中使用通配符for,而不是在循环体中。

(看起来好像您修改了相关问题的代码使用通配符复制文件并添加时间戳没有理解它。)

如果文件位于不同的目录中,$sourcedir您必须 (1)$sourcedir与通配符一起指定或 (2) 将当前目录更改为$sourcedir.

示例1:

for file in "$sourcedir/$1"*
do
    base="${file##*/}"
    mv -i "$sourcedir/$base" "$archivedir/${base}_$(date +"%Y%m%d_%H%M%S")"
done

示例2(假设sourcedirarchivedir是绝对路径):

cd "$sourcedir"
for file in "$1"*
do
    mv -i "$file" "$archivedir/${file}_$(date +"%Y%m%d_%H%M%S")"
done

(所有代码均未经测试。)

相关内容