【问题标题】:Move files to sysdate folders将文件移动到 sysdate 文件夹
【发布时间】:2016-10-20 16:46:29
【问题描述】:

我想制作一个 crontab 将文件从文件夹移动到 sysdate 文件夹。 例如从源:/uploads 到目标:/archive,在一天结束时将文件从 /uploads 移动到 /archive/20160619

到目前为止,这是进展(只想移动 pdf),但我不知道 sysdate 部分:

    #!bin/bash/
SOURCE_DIR="/var/www/html/dms/uploads"
TARGET_DIR="/var/www/html/dms/archive"
FILE_EXTENSION="pdf"
for FILE in $(ls -1 ${SOURCE_DIR} | grep ".${FILE_EXTENSION}"); do
  mv ${SOURCE_DIR}/${FILE} ${TARGET_DIR}/${FILE}"
done

【问题讨论】:

  • 添加到您的脚本TIMESTAMP=$( date "+%Y%m%d") 并使用它

标签: bash file directory


【解决方案1】:

使用相同的逻辑:

#!/bin/bash

SOURCE_DIR="/var/www/html/dms/uploads"
TARGET_DIR="/var/www/html/dms/archive"
FILE_EXTENSION="pdf"
DATE=$(date +%Y%m%d)
mkdir -p $TARGET_DIR/$DATE

mv $SOURCE_DIR/*.$FILE_EXTENSION $TARGET_DIR/$DATE

【讨论】:

    【解决方案2】:

    这是您可以将今天的日期添加为目录名称的方法,如果该目录尚不存在,则创建该目录。

    mkdir -p "${TARGET_DIR}/`date --utc --rfc-3339=date`/"
    mv ${SOURCE_DIR}/${FILE} "${TARGET_DIR}/`date --utc --rfc-3339=date`/${FILE}"
    

    【讨论】:

    • ls output 永远不应该被解析。坏主意。
    • @sjsam 不明白你的意思,请解释一下。
    • $(ls -1 ${SOURCE_DIR} | grep ".${FILE_EXTENSION}") 在处理非标准文件名时会给出不一致的结果
    • 这甚至不是我回答的一部分。当然,使用find 会更好,但这是另一个话题。
    • That wasn't even part of my answer. 那么,${FILE} 是从哪里出现在您的代码中的?我以为您正在编写 OP 原始 for 循环中的部分..
    【解决方案3】:

    你可以使用下面的脚本

    #/bin/bash
    mover()
    {
      dirname="$(date +%Y%m%d)"
      if [ -d /var/www/html/dms/archive/"$dirname" ]
        then
      mv "$1" "/var/www/html/dms/archive/$dirname"
      else
        mkdir "/var/www/html/dms/archive/$dirname"
      mv "$1"  "/var/www/html/dms/archive/$dirname" 2>/dev/null
      # I'm Suppressing the error, but you be careful about this
      fi
    }
    
    export -f mover
    
    # Find the files using thr find command and move them using the mover function
    find /var/www/html/dms/uploads -maxdepth 0 -type f -name "*.pdf" -print0 -exec bash -c 'mover "$0"' {} \;
    

    注意:您不应该解析 ls 输出,请查看[ this ] wiki 帖子。

    【讨论】:

    • 当 yaron 的答案是一个简单的选择时,你为什么要做所有这些事情?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 2019-07-11
    • 1970-01-01
    相关资源
    最近更新 更多