2015-08-21 300 views
0

我有一個FreeNAS 9.3安裝設置,並有5個網絡攝像頭捕獲圖片到NAS上的共享。我需要一個腳本,我可以每週運行一個cron作業,將文件移動到日期文件夾中,以便導航到特定日期以監視攝像機。Shell腳本來創建文件夾並將文件移動到新文件夾

的文件夾結構如下所示:

的根文件夾是

/mnt/Data/Camera2 

,並在此文件夾中,我有我的5個相機

/mnt/Data/Camera2/CHF 
/mnt/Data/Camera2/CHR 
/mnt/Data/Camera2/GCMR 
/mnt/Data/Camera2/GCMF 
/mnt/Data/Camera2/GCMS 

在這些相機文件夾中,網絡攝像機自動創建文件夾,如Snapshot_time和Record_alarm

我有存檔文件夾中

/mnt/Data/Camera2/Archive/CHF 
/mnt/Data/Camera2/Archive/CHR 
/mnt/Data/Camera2/Archive/GCMR 
/mnt/Data/Camera2/Archive/GCMF 
/mnt/Data/Camera2/Archive/GCMS 

我需要的腳本做的是跑的時候, 使顯示目錄中的每個與當前的日期,即上述存檔文件夾中。 WB_21-08-2015

一旦創建了這些目錄,我就需要將上述相機文件夾的內容移動到相應的存檔文件夾中。

我已經詢問了FreeNAS論壇,但迄今爲止沒有太多幫助,但我確實有以下腳本。當我運行它,我得到各種錯誤...

#!/bin/bash 
ROOT_DIR="/mnt/Data/Camera2" 
BACKUP_DIRS="$ROOT_DIR/Archive/GCMF $ROOT_DIR/Archive/GCMR $ROOT_DIR/Archive/GCMS $ROOT_DIR/Archive/CHF $ROOT_DIR/Archive/CHR" 
DATE=$(date +%d-%m-%Y) 
DATE_DIR="WB_$(date +%d-%m-%Y)" 
LOG_DIR="$ROOT_DIR/Logs/WB_$(date +%d-%m-%Y)" 
LOG_FILE="$LOG_DIR/${DATE}.txt" 

/bin/mkdir -p $LOG_DIR 

/bin/echo "Weekly DDL camera backup:" > $LOG_FILE 
/bin/echo "" >> $LOG_FILE 

for FOLDER in $BACKUP_DIRS; do mkdir "${FOLDER}/${DATE_DIR}" >> $LOG_FILE 

mv -f -b $ROOT_DIR/GCMF/Snapshot_time $ROOT_DIR/Archive/GCMF/${DATE_DIR} 
mv -f -b $ROOT_DIR/GCMR/Snapshot_time $ROOT_DIR/Archive/GCMR/${DATE_DIR} 
mv -f -b $ROOT_DIR/GCMS/Snapshot_time $ROOT_DIR/Archive/GCMS/${DATE_DIR} 
mv -f -b $ROOT_DIR/CHF/Snapshot_time $ROOT_DIR/Archive/CHF/${DATE_DIR} 
mv -f -b $ROOT_DIR/CHR/Snapshot_time $ROOT_DIR/Archive/CHR/${DATE_DIR} 
done 

請幫助!

編輯: 由@Ecnarfi運行修改後的劇本後,我得到了以下錯誤:

[[email protected]] /mnt/Data/Camera2/Scripts# /bin/bash -ex Final.sh 
+ ROOT_DIR=/mnt/Data/Camera2 
+ BACKUP_DIR=/mnt/Data/Camera2/Archive 
+ CAMERAS='GCMF GCMR GCMS CHF CHR' 
++ date +%d-%m-%Y 
+ DATE=21-08-2015 
++ date +%d-%m-%Y 
+ DATE_DIR=WB_21-08-2015 
++ date +%d-%m-%Y 
+ LOG_DIR=/mnt/Data/Camera2/Logs/WB_21-08-2015 
+ LOG_FILE=/mnt/Data/Camera2/Logs/WB_21-08-2015/21-08-2015.txt 
+ /bin/mkdir -p /mnt/Data/Camera2/Logs/WB_21-08-2015 
+ /bin/echo 'Weekly DDL camera backup:' 
+ /bin/echo '' 
+ for FOLDER in '${CAMERAS}' 
+ mkdir /mnt/Data/Camera2/Archive/GCMF/WB_21-08-2015 
+ mv -f -b /mnt/Data/Camera2/GCMF/Snapshot_time /mnt/Data/Camera2/Archive/GCMF/WB_21-08-2015 
mv: illegal option -- b 
usage: mv [-f | -i | -n] [-hv] source target 
     mv [-f | -i | -n] [-v] source ... directory 
+1

你會得到什麼錯誤? – choroba

+0

用'bash -ex'運行你的腳本來顯示指令並停止第一個錯誤 –

+0

顯式路徑是什麼?修復一次'PATH'並讓shell找到命令。對命令路徑進行硬編碼只會導致問題(儘管這些問題也會變得模糊和罕見)。 – tripleee

回答

0

您的循環創造的攝像頭一個存檔文件夾,然後試圖移動所有的相機文件夾,然後嘗試爲每個其他相機文件夾執行相同的操作,但由於文件夾已被移動,因此失敗。

我修改了你的代碼,這對我有用。

#!/bin/bash 

ROOT_DIR="/mnt/Data/Camera2" 
BACKUP_DIR="${ROOT_DIR}/Archive" 
CAMERAS="GCMF GCMR GCMS CHF CHR" 
DATE=$(date +%d-%m-%Y) 
DATE_DIR="WB_$(date +%d-%m-%Y)" 
LOG_DIR="${ROOT_DIR}/Logs/WB_$(date +%d-%m-%Y)" 
LOG_FILE="${LOG_DIR}/${DATE}.txt" 

/bin/mkdir -p ${LOG_DIR} 

/bin/echo "Weekly DDL camera backup:" > ${LOG_FILE} 
/bin/echo "" >> ${LOG_FILE} 

for FOLDER in ${CAMERAS} 
do 
    mkdir ${BACKUP_DIR}/${FOLDER}/${DATE_DIR} >> $LOG_FILE 

    mv -f -b ${ROOT_DIR}/${FOLDER}/Snapshot_time ${BACKUP_DIR}/${FOLDER}/${DATE_DIR} 

done 
+0

非常感謝,迄今爲止看起來不錯,但是我得到了錯誤:'[Camera2 @ DaffyDuck]/mnt/Data/Camera2/Scripts%/ bin/bash -ex Final.sh + $'\ r' Final。 sh:第2行:$'\ r':找不到命令' – Ryan

+1

這聽起來像是dos2unix可能會修復的東西 – Ecnarfi

+0

找不到如何在FreeBSD上安裝dos2unix或unix2dos,所以我剛剛在ssh shell中打開編輯器,使用vi Final.sh這是從文件中取出所有^ M後得到的結果:[請參閱我在原始文章中的編輯] – Ryan

相關問題