要求是将文件从源移动到存档文件夹并添加时间戳我已经创建了以下脚本,但它没有移动我作为通配符传递的日期
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(假设sourcedir
和archivedir
是绝对路径):
cd "$sourcedir"
for file in "$1"*
do
mv -i "$file" "$archivedir/${file}_$(date +"%Y%m%d_%H%M%S")"
done
(所有代码均未经测试。)