Bash 比较文件';使用shell脚本从文件和当前目录中删除
我有一个文件files.txt,内容如下:Bash 比较文件';使用shell脚本从文件和当前目录中删除,bash,unix,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
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
#/bin/bash
DT=`date+%d%m%Y`
而IFS=读取-r行
做
如果[-f$行]
然后
echo“$line$DT”>files.ok
其他的
echo“$line”>files.notok
fi
done
它执行时没有任何错误,但不提供带有日期附加的预期输出。有人能告诉我文件存在性测试是否正确吗问题在于您的文件写入操作符
在每次成功的情况下都会创建一个新文件,您需要使用附加到现有文件的>
操作符
一种更简洁的代码处理方法是
#!/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
#/bin/bash
dateToday=“$(日期+%d%m%Y)”
而IFS=read-r文件;做
[-f“$file”]&&printf“%s\n”$file$dateToday”>>files.OK | | printf“%s\n”$file”>>files.NOK
done
我为改进脚本做了哪些更新
$(..)
运行它们
到>
测试([])
运算符的返回代码使用单行条件。如果条件[-f“$file”]
成功,则运行&&
之后的命令;如果条件失败,则运行|
之后的命令非常感谢你。它确实对我有用。我没有在这里补充另一点。在当前目录中检查文件是否存在时,我试图附加文件的日期/时间戳。我在while循环中使用了以下代码:DT=“$(ls-lrt$file | awk-F”“{print$6$7$8}”)。现在它不会在“files.ok”文件中追加日期。有什么建议吗?好的,我现在知道了。我不得不删除=。现在它成功了。非常感谢你的帮助。