根据修改日期移动文件夹的脚本
Posted
技术标签:
【中文标题】根据修改日期移动文件夹的脚本【英文标题】:script to move folder based on modified date 【发布时间】:2013-06-07 13:34:24 【问题描述】:第一次发帖。 背景-我的妻子是一名摄影师,她在编辑时拍了很多照片并将它们保存到驱动器 (mnt/STStorage) 中,但之后从未清理过。我有一个驱动器,我想根据修改日期将文件夹移动到。(/mnt/LTStorage)。 需要有关脚本的帮助,我可以添加到 cron 作业以每天运行一次 30 1 * * * 我想让脚本..
-
检查 /mnt/STStorage/ 根文件夹的最后修改日期以及是否较旧
超过 14 天,将该文件夹及其中的所有内容移至
/mnt/LTStorage/ 同时保持相同的文件夹名称。
然后将移动到 /mnt/STStorage/ 的内容写入,以便我们知道
已移动,并通过电子邮件向我发送移动文件夹的日志。
操作系统 CentOS 6.4
这就是我所拥有的,认为这可能暂时有效。可以更干净。
#/bin/bash
dt=$(date +%Y.%m.%d)
From="/mnt/STStorage/"
To="/mnt/LTStorage/"
if [[ ! -d "$To" ]]; then
mkdir -p "$To"
fi
cd "$From"
for i in "$@"; do
find . -type d -mtime +14 -exec mv "" "$To" \; > "$From"/Moved."$dt".txt
uuencode "$From"/Moved."$dt".txt "$From"/Moved."$dt".txt | mail -s "Files Moved"
me@me.com
done
然后我会将它添加到 crontab 中,每天运行一次。
【问题讨论】:
您可以将详细模式选项添加到mv
。这样做 - find . -type d -mtime +14 -exec mv -v "" "$To" \;
如何将 -v 的输出写入日志并保存到 /mnt/STStorage 并通过电子邮件发送?我测试了 -v 并打印出文件以及它在终端上的移动位置
在答案中添加了这一点。我并不是说这是最好的方法。但至少你有一些东西可以玩,并根据你的需要定制它,比如将日期戳附加到日志文件等。
【参考方案1】:
您可以将-exec
与find
一起使用。比如:
find /mnt/STStorage/ -type d -mtime +14 -exec mv /mnt/LTStorage/ \;
-type d
将确保仅移动目录。
另一种选择是使用xargs
find /mnt/STStorage/ -type d -mtime +14 | xargs -I '' mv /mnt/LTStorage/
更新:
要添加正在移动的内容,您可以为mv
设置verbose
模式选项
find /mnt/STStorage/ -type d -mtime +14 -exec mv -v /mnt/LTStorage/ \;
因为这将在标准输出上打印所有内容。您可以将其重定向到日志文件。
find /mnt/STStorage/ -type d -mtime +14 -exec mv /mnt/LTStorage/ \; > /mnt/STStorage/log.file
对于电子邮件,您可以执行以下操作 -
uuencode /mnt/STStorage/log.file /mnt/STStorage/log.file | mail -s "this is my subject line" chip@email.com
【讨论】:
谢谢你,这让我走上了正确的道路。在我上面更新的代码之后还有其他问题。 谢谢,到目前为止我的工作正常,只需添加电子邮件即可。我可以在保存日志文件的末尾使用 && 之类的东西吗? 创建日志文件后,在下一行添加此命令uuencode "$From"/Moved."$dt".txt "$From"/Moved."$dt".txt | mail -s "Whatever Subject" chip@email.com
以上是关于根据修改日期移动文件夹的脚本的主要内容,如果未能解决你的问题,请参考以下文章