2017-03-16 127 views
1

我有內容的文件files.txt從一個文件,在當前目錄下的文件比較的存在它存在於當前目錄中,如果這樣做,我需要在每個files.txt的行的末尾附加日期,從而使輸出應該是使用shell腳本

F1.txt16032017 
F2.txt16032017 
F3.txt16032017 
F4.txt16032017 

我用下面簡單的shell腳本。

#!/bin/bash 
DT=`date +%d%m%Y` 
while IFS=read -r line 
do 
if [ -f $line] 
then 
echo "$line$DT" > files.ok 
else 
echo "$line" > files.notok 
fi 
done < files.txt 

它執行沒有任何錯誤,但沒有提供期望的輸出與日期附加。誰能告訴我,如果文件存在測試是正確的

回答

2

的問題是它創建了一個你的文件寫入操作>創建對每一個成功的情況下,一個新的文件,你需要使用了>>算子追加到現有的文件。

你的代碼了一個非常巧妙的做法是做

#!/bin/bash 

dateToday="$(date +%d%m%Y)" 

while IFS= read -r file; do 
    [ -f "$file" ] && printf "%s\n" "$file$dateToday" >> files.OK || printf "%s\n" "$file" >> files.NOK 
done < files.txt 

什麼,我已經爲改進腳本更新,

  1. 刪除使用反引號``過時命令替換語法和使用$(..)來運行它們。
  2. 用雙引號括起來的變量,局部變量。
  3. 修正了>文件的寫入操作員>>
  4. 使用單一的線路條件決策使用test ([])運算符的返回代碼。如果條件[ -f "$file" ]成功,並且在條件失敗後運行||之後的命令,則運行&&之後的命令。
+0

非常感謝Inian。它對我有用。我錯過了在這裏增加另一點。我試圖在其當前目錄中存在檢查時附加文件的日期/時間戳。我在while循環中使用了以下代碼:DT =「$(ls -lrt $ file | awk -F」「'{print $ 6 $ 7 $ 8}')」。現在它不會在「files.ok」文件中追加日期。任何建議。 – Petryanu

+0

好吧,我現在明白了。我不得不放棄=之間的空間。現在它工作了。謝謝你的幫助。 – Petryanu