Sheila
Sheila

Reputation: 2596

Check if each file in a list (which is in a file) exists in bash

I have a text file (ListOfAllFiles.txt) that has a list of 500 files some of which exist and some don't.

I'd like to make two texts files that indicate which files exist and which don't.

This is my code thus far:

#!/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

What am I doing wrong??

Upvotes: 0

Views: 257

Answers (1)

ruakh
ruakh

Reputation: 183290

Your biggest problem is that each pass through the loop will overwrite either /path/to/FilesFound.txt or /path/to/FilesNOTFound.txt; instead of using >, you should be using >>. Fixing that, and making other improvements for robustness, we get:

#!/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

Upvotes: 1

Related Questions