使用shell脚本比较文件在文件和当前目录中的存在

时间:2017-03-16 07:11:52

标签: bash unix

我有一个包含内容的文件files.txt:

F1.txt
F2.txt
F3.txt
F4.txt

我需要逐行读取文件files.txt,并检查它是否存在于当前目录中,如果存在,我需要在每行files.txt的末尾附加日期,以便输出应该是

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

它执行时没有任何错误,但不提供带有日期追加的预期输出。有人可以告诉我文件存在测试是否正确

1 个答案:

答案 0 :(得分:2)

问题在于您的文件写入操作符>在每个成功案例中创建创建新文件,您需要使用{em} {em}创建 >将附加到现有文件。

更简洁的代码方法是

>>

我为改进脚本所做的更新,

  1. 使用反引号``删除了过时的命令替换语法,并使用#!/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 来运行它们。
  2. 双引变量,低位局部变量。
  3. 修复了从$(..)>
  4. 的文件写入操作符
  5. 使用单行条件,使用>>运算符的返回码。如果条件test ([])成功则运行&&之后的命令,如果条件失败则运行[ -f "$file" ]之后的命令。