我已經編寫了一個腳本,將從Dropbox中獲取種子文件,將它們添加到傳輸並將該種子移動到另一個位置。腳本正在爲我工作,只要我一次只將一個文件放在一個文件夾中。如果我在文件夾中有多個文件,它會給我一個關於文件路徑太長的錯誤。任何人都可以從我的腳本中知道我做錯了什麼,以及如何改變它,以便它可以正確處理多個文件?這是Mac上的bash腳本,通過launchd每60秒執行一次。我在做什麼錯誤,我的循環正在處理整個目錄列表,而不是每個單獨的文件名?
謝謝!
#!/bin/bash
# Log to debug file
set –xv; exec 1>>/Users/admin/TorrentMoverLog.txt 2>&1
date
###################################################
### ###
### Torrent Mover v.0.1 ###
### ###
###################################################
################# Variables #####################
###################################################
######## Watch Folders ##
## ##
WATCH_PATH=/Users/admin/Dropbox/Torrent-Drop/
WATCH_FOLDERS=(Movies/ TV/ Music/ FLAC/ Software/ Other/)
## ##
######## DL Folders ##
## ##
DL_PATH=/Volumes/Media/
## ##
###################################################
################ Functions ######################
###################################################
## ##
function add_torrent {
/usr/local/bin/transmission-remote -a "$1" -w "$2""$3"
}
## ##
###################################################
################### Script ######################
## ##
## Rename files with spaces
echo "Renaming files with spaces"
find "$WATCH_PATH" -depth -name "* *" -execdir rename 's/ /_/g' "{}" \;
## Start Outer Loop
## Process Watch Folders
for wf in "${WATCH_FOLDERS[@]}"
do
WF_LIST=`ls $WATCH_PATH${wf} | grep torrent`
## Check for torrent files first, skip if none found
if [ "$WF_LIST" != "" ]; then
echo "Processing ${wf} folder..."
## Start Inner Loop
## Process Files within watch folders
## Set download folder
for torrent in "$WF_LIST";
do
case "${wf}" in
Movies/) echo "Movies variable set"
DL_FOLDER=Movies/ ;;
TV/) echo "TV variable set"
DL_FOLDER=TV_Shows/ ;;
Music/) echo "Music variable set"
DL_FOLDER=Music/ ;;
FLAC/) echo "FLAC variable set"
DL_FOLDER=PlexMusic/ ;;
Software/) echo "Software variable set"
DL_FOLDER=Software/ ;;
Other/) echo "Other variable set"
DL_FOLDER=Other/ ;;
esac
## Add torrent to transmission
echo "Running command, add_torrent $WATCH_PATH${wf}$torrent $DL_PATH $DL_FOLDER"
add_torrent "$WATCH_PATH${wf}$torrent" "$DL_PATH" "$DL_FOLDER"
## Move torrent
echo "Moving $WATCH_PATH${wf}$torrent to $DL_PATH""TorrentFiles/"
mv "$WATCH_PATH${wf}$torrent" "$DL_PATH""TorrentFiles/"
done
## End Inner Loop
echo "Finished processing torrents in ${wf} folder."
else
echo "Skipping ${wf} directory, no torrents found."
fi
done
## End Outer Loop
exit 0
在腳本**中使用'ls'是錯誤的。請參閱http://mywiki.wooledge.org/ParsingLs –
...和btw,使用'功能'關鍵字是不好的形式。 'add_torrent(){...}',沒有'function',是定義shell函數的POSIX兼容方式。 –
你必須小心地用空格重命名任何文件,但是你在''WF_LIST「'而不是'$ WF_LIST'上迭代,所以'torrent'只設置爲一個值,所有文件的空格分隔列表,而不是一次一個文件。但請注意,空白不是避免分析'ls'輸出的唯一原因。 – chepner