2016-06-19 276 views
2

我想制作一个crontab将文件从文件夹移动到sysdate文件夹。 例如从源代码:/上传到目的地:/档案,在一天结束时将文件从/上传到/ archive/20160619将文件移动到sysdate文件夹

到目前为止,这是进展(只想移动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

添加到您的脚本'TIMESTAMP = $(date“+%Y%m%d”)'并使用它 – GMichael

回答

2

这是如何将今天的日期添加为目录名称,并创建该目录(如果它还不存在)。

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

'ls output'永远不应该被解析。馊主意。 – sjsam

+0

@sjsam不确定你的意思,请解释。 – C14L

+0

'$(ls -1 $ {SOURCE_DIR} | grep“。$ {FILE_EXTENSION}”)'会在处理非标准文件名时给出不一致的结果 – sjsam

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

你可以使用下面的脚本

#/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 ]维基职位。

+0

当yaron的答案是一个简单的选择时,你为什么要做所有这些事情? –

相关问题