1

第一篇文章。背景 - 我的妻子是一名摄影师,她在编辑时拍了很多照片并将它们保存到驱动器 (mnt/STStorage) 中,但之后从未清理过。我有一个驱动器,我想根据修改日期将文件夹移动到。(/mnt/LTStorage)。需要脚本的帮助,我可以添加到 cron 作业中以每天运行一次 30 1 * * * 我希望脚本...

  1. 检查 /mnt/STStorage/ 根文件夹的最后修改日期,如果超过 14 天,将该文件夹及其中的所有内容移动到 /mnt/LTStorage/,同时保持相同的文件夹名称。
  2. 然后将移动的内容写到 /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 中,每天运行一次。

4

1 回答 1

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/

更新:

要添加正在移动的内容,您可以将verbose模式选项设置为mv

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
于 2013-06-11T16:01:43.550 回答