我想创建一个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
答案 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。