检查bash中是否存在列表中的每个文件(在文件中)

时间:2013-07-30 22:44:36

标签: 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 > /path/to/FilesNOTFound.txt
  fi
done

我做错了什么?

1 个答案:

答案 0 :(得分:1)

你最大的问题是,每次通过循环都会覆盖/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