2011-03-22 119 views
0

我開發了一個shell腳本將文件從源文件複製到目標文件,同時刪除源文件中的複製文件。我可以複製這些文件,但不能在源文件中刪除這些文件。使用ftp刪除文件

files='ls filename' 
for file in $files 
do 
ftp -vn $hostname <<EOFD 
    quote USER $username 
    quote PASS $password 
binary 
cd $start_dir 
rm -rf $file 
quit 
EOFD 
done 
  • 我有錯誤,「沒有這樣的文件或目錄中找到」
  • 通過把FTP的for循環外還我有錯誤爲「無效的命令」
  • 我也試過在SSH,但它提示用戶名和密碼

回答

0
files=`ls filename` 

認沽反引號,周圍的命令不是簡單的報價,以獲取其輸出。

我也試過在SSH,但它提示輸入用戶名和密碼 - 檢查SSH-Login without password

0

使用輸入流直接編寫FTP命令到ftp通常是一個壞主意:它缺少任何錯誤處理,它可能會完全錯誤,並且您沒有機會控制它。如果您有機會使用更精簡的命令行客戶端,例如lftpcurl或類似的腳本。

而且,這是一個非常糟糕的主意來遍歷文件使用

files=`ls files` 
for file in $files 

稍微好一點的解決方案是:

for file in *

,但它不適合:如果*(或ls輸出)會擴展超過命令行緩衝區,它會失敗。一個相當可擴展的解決方案是這樣的:

find . | while read file do 
    do_something_with $file 
done

...但它不是你想要的。實際上,如果您只是想將文件從源文件傳輸到目標文件,然後從源文件中刪除文件,則可以使用lftpmput命令和-E選項來刪除傳輸後的文件或類似rsync --remove-source-files的文件。

0

完全過時的解決方案:

替換行

`rm -rf $file` 

`!rm -rf $file` 

這是因爲,在代碼中的那個地方你的FTP主機,直到EOFD上字符串已到達,因此要在本地系統(源)上運行任何命令,需要以前綴!作爲前綴。

最好的測試方法是手動執行命令。以下是我已經測試:

[email protected]:~$ ftp XXX.XXX.XXX 
Connected to static-XX-XX-XX-XX.XXXXXX.com. 
220---------- Welcome to Pure-FTPd [privsep] [TLS] ---------- 
220-You are user number 2 of 50 allowed. 
220-Local time is now 07:52. Server port: 21. 
220-IPv6 connections are also welcome on this server. 
220 You will be disconnected after 15 minutes of inactivity. 
Name (XXXXXX.XXX:XXX): XXXXXXX 
331 User XXXXXXX OK. Password required 
Password: 
230 OK. Current restricted directory is/
Remote system type is UNIX. 
Using binary mode to transfer files. 
ftp> lcd test/ 
Local directory now /home/mtk4/test 
ftp> pwd 
257 "/" is your current location 
ftp> !pwd 
/home/mtk4/test 
ftp> !ls 
sample.txt 
ftp> !rm sample.txt 
ftp> !ls 
ftp> bye 
221-Goodbye. You uploaded 0 and downloaded 0 kbytes. 
221 Logout. 
[email protected]:~$ 

或者另一種解決方案,

再次使用for循環一樣,完整的FTP完成遍歷組相同的文件並將其刪除後。