你不能比較這樣的整個文件。無論如何,你似乎在比較一個文件本身。
#!/bin/bash
while true
do
newest=~/Gene1/$(ls -t1 ~/Gene1 | head -n 1)
while ! cmp "$newest" "$newest" # huh? you are comparing a file to itself
do
# huh? do you mean this:
cat "$newest" > /tmp/cmdb
obexftp -b $1 -B 6 -p /tmp/cmdb
done
done
這是最麻煩的語法錯誤和反模式修復,但幾乎保證不做任何有用的事情。希望這足以讓你更接近你的目標。 (在這個問題中說明它可能也有幫助。)
編輯:如果您試圖在每次當您正在觀看的目錄中出現新文件時嘗試複製最新文件,請嘗試此操作。仍然存在競賽狀況;如果在複製過程中出現多個新文件,則會錯過除一個之外的所有文件。
#!/bin/sh
genedir=$HOME/Gene1
previous=randomvalue_wehavenobananas
while true; do
newest=$(ls -t1 "$genedir" | head -n 1)
case $newest in
$previous) ;; # perhaps you should add a sleep here
*) obexftp -b $1 -B 6 -p "$genedir"/"$newest"
previous="$newest" ;;
esac
done
(我改變了家當爲/ bin/sh的主要是表明該不再包含任何bash化,主要的變化是使用${HOME}
而不是~
。)
更健壯的方法是找到自上次複製以來出現的所有文件,並將其複製。然後你可以稍微不積極地運行一下(比如說,每5分鐘一次,也許是這樣,而不是你在這裏的旋轉鎖定,在迭代之間根本沒有sleep
)。您可以在watch目錄中使用sentinel文件來跟蹤上次複製某些文件的時間,或者在ls -t1
輸出上運行for
循環,直到看到之前看到的文件。 (請注意,關於解析ls
輸出缺乏穩健性的評論,儘管如此。)
McAfee Web Gateway不允許我讀取您的代碼:-( 請您可以在stackoverflow.com上發佈您的代碼的相關部分? – olibre 2012-02-02 18:58:12
你的腳本的一部分沒有做到嗎?我沒有看到第二個'do'或第二個'do'的終止']' – AlG 2012-02-02 19:01:29
以'$'結尾的行看起來不完整。 ?還解析'ls'的結果是一個腳本是非常脆弱的 – Johnsyweb 2012-02-02 19:02:21