2016-06-19 169 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的答案是一個簡單的選擇時,你爲什麼要做所有這些事情? –

相關問題