TLDR; adicione -F
A opção -f
do grep é usada para se referir a um arquivo que contém uma lista de padrões - seu arquivo não contém uma lista de padrões que contém uma lista de nomes de arquivos
homem grep
-f FILE, --file=FILE Obtain patterns from FILE, one per line. The empty file contains zero patterns, and therefore matches nothing. (-f is specified by POSIX.)
Você precisa ter certeza de que quaisquer metacaracteres nos seus nomes de arquivo sejam de escape, a menos que você queira que eles sejam tratados como metacaracteres.
$ cat files.txt
/Volumes/Documents - Part 1/July 2009/vacation.pdf
/Volumes/Documents - Part 1/July 2009/pie time!.jpg
/Volumes/Documents - Part 1/July 2009/Coding/Unix/sample.sh
/Volumes/Documents - Part 1/July 2009/trip-to-spain.pages
$ echo a | grep -vf files.txt
a
Parece-me que o seu arquivo.txt provavelmente contém mais do que as quatro linhas que você mostra.
Verifique o arquivo usando
$ wc files.txt
4 21 221 files.txt
$ sum files.txt
43924 1
Em caso de dúvida, use a opção -F
(letra maiúscula F) - mas você não escapará dos metacaracteres no arquivo.txt.
Observe o seguinte
$ cat files.txt
/Volumes/Documents - Part 1/July 2009/vacation.pdf
/Volumes/Documents - Part 1/July 2009/pie time!.jpg
/Volumes/Documents - Part 1/July 2009/Coding/Unix/sample.sh
/Volumes/Documents - Part 1/July 2009/trip-to-spain.pages
[z-a]
$ echo aaa | grep -vf files.txt
grep: Invalid range end
$ echo aaa | grep -Fvf files.txt
aaa
A opção -F
diz ao grep que seus padrões de pesquisa não contêm expressões regulares e que deve tratá-los como texto simples.