根据修改日期移动文件夹的脚本

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】:

您可以将-execfind 一起使用。比如:

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

以上是关于根据修改日期移动文件夹的脚本的主要内容,如果未能解决你的问题,请参考以下文章

使用Linux脚本移动文件

移动文件并使用时间戳日期重命名的脚本

根据文件名中的日期戳移动文件

shell备份移动某个目录下的文件

sh 根据样本间隙移动文件的日期时间

Google Apps 脚本根据文件名将我的驱动器文件移动到团队驱动器文件夹