For循环删除文件而不是重命名
问题描述:
我有一个文件的目录,我需要使用时间戳重命名为给定的字符串。For循环删除文件而不是重命名
我使用下面的代码:
for file in itvl_*
do
mv "$file" "Interval_$(stat -c %Y "$file" | date +%Y%m%d%H%M%S).Interval_001"
done
当我运行在符合给定的面具itvl_ *文件的目录的脚本,它会删除所有,但一个或两个文件,然后成功地重命名组中的最后一个文件。
这里可能会发生什么?
答
它不会删除所有的文件,它只是简单地将它们全部重命名为相同的目标名称。
您可以通过运行看出来:
for file in itvl_*
do
echo "Interval_$(stat -c %Y "$file" | date +%Y%m%d%H%M%S).Interval_001"
done
其结果是,它们将覆盖彼此只有最后一个幸存。
你的“秒”不足以区分文件 - bash可能在同一秒内重命名所有文件的大部分,创建具有相同文件名的多个文件。 – Raizuri
'日期'不从标准输入中读取;您所做的只是将当前日期/时间用于新文件名。你希望'$(date +%Y%m%d%H%M%S --date $(stat -c%Y“$ file”))'将'stat'的结果用作'date的参数'。 – chepner