检查列表中的每个文件(位于文件中)是否存在于bash中
我有一个文本文件(ListOfAllFiles.txt),它有一个500个文件的列表,其中有些存在,有些不存在 我想制作两个文本文件,指出哪些文件存在,哪些不存在 这是我迄今为止的代码:检查列表中的每个文件(位于文件中)是否存在于bash中,bash,Bash,我有一个文本文件(ListOfAllFiles.txt),它有一个500个文件的列表,其中有些存在,有些不存在 我想制作两个文本文件,指出哪些文件存在,哪些不存在 这是我迄今为止的代码: #!/bin/bash for f in $(cat /path/to/ListOfAllFiles.txt) do if [[ -f $f ]]; then echo $f > /path/to/FilesFound.txt else echo $f > /pat
#!/bin/bash
for f in $(cat /path/to/ListOfAllFiles.txt)
do
if [[ -f $f ]]; then
echo $f > /path/to/FilesFound.txt
else
echo $f > /path/to/FilesNOTFound.txt
fi
done
我做错了什么???您最大的问题是每次通过循环都会覆盖
/path/to/FilesFound.txt
或/path/to/FilesNOTFound.txt
;您应该使用>
,而不是使用>
。解决了这个问题,并对健壮性进行了其他改进,我们得到:
#!/bin/bash
echo -n > /path/to/FilesFound.txt # reset to empty file
echo -n > /path/to/FilesNOTFound.txt # reset to empty file
while IFS= read -r f ; do
if [[ -f "$f" ]]; then
echo "$f" >> /path/to/FilesFound.txt
else
echo "$f" >> /path/to/FilesNOTFound.txt
fi
done < /path/to/ListOfAllFiles.txt
#/bin/bash
echo-n>/path/to/FilesFound.txt#重置为空文件
echo-n>/path/to/FilesNOTFound.txt#重置为空文件
而IFS=read-rf;做
如果[-f“$f”];然后
回显“$f”>>/path/to/FilesFound.txt
其他的
echo“$f”>>/path/to/FilesNOTFound.txt
fi
完成
感谢您迄今为止的帮助。当我这样做时,创建了两个文件(filesfund.txt和FilesNOTFound.txt),但是没有向它们写入任何内容…@Sheila:您确定/path/to/ListOfAllFiles.txt
存在并包含您认为它的功能吗?(什么是head/path/to/ListOfAllFiles.txt
print?)是的,它存在。我刚刚打开ListOfAllFiles.txt进行双重检查,它会打印每个文件的完整路径,每行一个文件。@Sheila:那么head/path/to/ListOfAllFiles.txt是否打印您想要的内容?(确保路径正确,包括/
;确保在正确的位置有大写和小写字母;等等)啊,是的-我意识到在使用“head”命令时,ListOfALlFiles.txt中的所有行都不在同一行。谢谢你的帮助!