Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 基于修改日期移动文件夹的脚本_Bash_Cron_Pipe_Mv_Uuencode - Fatal编程技术网

Bash 基于修改日期移动文件夹的脚本

Bash 基于修改日期移动文件夹的脚本,bash,cron,pipe,mv,uuencode,Bash,Cron,Pipe,Mv,Uuencode,第一个帖子。 背景-我妻子是一名摄影师,她在编辑照片时拍摄了很多照片并将其保存到驱动器(mnt/STStorage),但之后从不清理。我有一个驱动器,希望根据修改的日期将文件夹移动到该驱动器。(/mnt/LTStorage)。 需要关于脚本的帮助,我可以将其添加到cron作业中,以便每天运行一次30 1*** 我想让剧本 检查/mnt/STStorage/root文件夹中上次修改的日期(如果较旧) 超过14天,将文件夹和其中的所有内容移动到 /mnt/LTStorage/同时保持相同的文件夹名称

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

  • 检查/mnt/STStorage/root文件夹中上次修改的日期(如果较旧) 超过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中,每天运行一次。

    您可以使用
    -exec
    查找
    。比如:

    find /mnt/STStorage/ -type d -mtime +14 -exec mv {} /mnt/LTStorage/ \;
    
    • -类型d
      将确保仅移动目录
    另一个选项是使用
    xargs

     find /mnt/STStorage/ -type d -mtime +14 | xargs -I '{}' mv {} /mnt/LTStorage/
    
    更新: 要添加正在移动的内容,您可以为
    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
    

    您可以使用
    -exec
    查找
    。比如:

    find /mnt/STStorage/ -type d -mtime +14 -exec mv {} /mnt/LTStorage/ \;
    
    • -类型d
      将确保仅移动目录
    另一个选项是使用
    xargs

     find /mnt/STStorage/ -type d -mtime +14 | xargs -I '{}' mv {} /mnt/LTStorage/
    
    更新: 要添加正在移动的内容,您可以为
    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
    

    您可以将详细模式选项添加到
    mv
    。执行此操作-
    find-键入d-mtime+14-execmv-v“{}”$To“\如何将-v的输出写入日志并保存到/mnt/STStorage并发送电子邮件?我测试了-v,它打印出了文件,以及它在终端上的移动位置,并在答案中添加了。我并不是说这是最好的办法。但至少你有一些东西可以玩,并根据需要自定义它,如在日志文件中添加日期戳等。你可以将详细模式选项添加到
    mv
    。执行此操作-
    find-键入d-mtime+14-execmv-v“{}”$To“\如何将-v的输出写入日志并保存到/mnt/STStorage并发送电子邮件?我测试了-v,它打印出了文件,以及它在终端上的移动位置,并在答案中添加了。我并不是说这是最好的办法。但至少你有一些东西可以玩,并根据你的需要定制它,比如在日志文件中添加日期戳等。谢谢你,这让我走上了正确的道路。在我更新了上面的代码后还有其他问题。谢谢你,到目前为止我的代码工作正常,只需将电子邮件添加到其中即可。我可以在保存日志文件的末尾使用类似&&的命令吗?创建日志文件后,在下一行
    uuencode“$From”/Moved.$dt.txt”$From”/Moved.$dt.txt | mail-s“任意主题”添加此命令chip@email.com
    谢谢,这让我走上了正确的道路。在我更新了上面的代码后还有其他问题。谢谢你,到目前为止我的代码工作正常,只需将电子邮件添加到其中即可。我可以在保存日志文件的末尾使用类似&&的命令吗?创建日志文件后,在下一行
    uuencode“$From”/Moved.$dt.txt”$From”/Moved.$dt.txt | mail-s“任意主题”添加此命令chip@email.com