0

我有一个文本文件 (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

我究竟做错了什么??

4

1 回答 1

1

您最大的问题是每次通过循环都会覆盖/path/to/FilesFound.txtor /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
于 2013-07-30T22:47:54.277 回答