2012-10-03 26 views
0

我正在下面的bash腳本,我需要上傳超過10 MB的特定文件:LFTP把文件放在特定的目錄下?

#!/bin/sh 

FTP_HOST=ftp.ftphost.com 
FTP_USER=myftpuser 
FTP_PASS=securepassword 

[[ -n "$1" ]] || { echo "Usage: findlarge [PATHNAME]"; exit 0 ; } 
FILES=`find "$1" -type f -size +10000k -printf '%p;'` 

OLD_IFS="$IFS" 
IFS=";" 
FILES_ARRAY=($FILES) 
IFS="$OLD_IFS" 

for fl in "${FILES_ARRAY[@]}" 
do 
    INVERSE=`${fl//\/var\/www\/html/\/public_html}` 
    lftp -u $FTP_USER,$FTP_PASS -e "cd '${INVERSE}'; put '${fl}';quit" $FTP_HOST 
done 

它用於需要上傳到自己的服務器,它正嘗試做更大的文件一個特定的CDN並且我不知道如何繼續的是主機端的文件位於/var/www/html/,但遠程服務器需要將它們置於/public_html/。我在遠程服務器上需要與我在主機服務器上相同的文件結構。

我遇到的問題是$INVERSE仍然包括實際的文件名和路徑..我需要一種方法來修剪INVERSE變量的文件名,以便我可以正確地將文件放在正確的目錄中。

有誰知道一個正則表達式語句,可以採取類似的:

/public_html/path/to/file/filename.zip 

,並更改爲

/public_html/path/to/file/ 

回答

1

你可以使用:

$(dirname "$INVERSE") 

不正是你想要=)

另外,使用正則表達式使用sed:

$(echo "$INVERSE" | sed -e 's,/[^/]*$,/,') 

解釋的正則表達式:

  1. 匹配斜線
  2. 匹配儘可能多的字符不屬於斜線,你可以
  3. 比賽結束該行

關於替換,我們只是確保不刪除最後一個斜槓。

1

使用bash 參數擴展

$ x=/public_html/path/to/file/filename.zip 
$ echo ${x%/*}/ 
/public_html/path/to/file/ 

它有優勢,使用內置一個bash 的,所以它很輕。

請參閱http://wiki.bash-hackers.org/syntax/pe

相關問題