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

时间:2013-06-11 15:55:07

标签: bash cron pipe mv uuencode

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

  1. 检查/ mnt / STStorage / root文件夹以查找上次修改日期&如果年纪大了 超过14天,移动该文件夹及其中的所有内容     / mnt / LTStorage /同时保留相同的文件夹名称。
  2. 然后写下移动到/ mnt / STStorage /的内容,以便我们知道什么 被移动并通过电子邮件向我发送了移动文件夹的日志。
  3. OS 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以每天运行一次。

1 个答案:

答案 0 :(得分: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