2017-03-16 135 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