将文件移动到sysdate文件夹

时间:2016-06-19 08:41:02

标签: bash file directory

我想创建一个crontab来将文件从文件夹移动到sysdate文件夹。 例如来自:/上传到目的地:/ archive,在一天结束时将文件从/ uploads移至/ archive / 20160619

到目前为止,这是进度(只想移动pdfs),但我不知道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

3 个答案:

答案 0 :(得分:3)

使用相同的逻辑:

#!/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

答案 1 :(得分:2)

这就是你今天可以添加今天日期作为目录名的方法,如果它还没有存在就创建目录。

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

答案 2 :(得分:1)

您可以使用以下脚本

#/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 post。