найти файлы не в списке - PullRequest
       10

найти файлы не в списке

18 голосов
/ 05 сентября 2011

У меня есть список файлов в file.lst.Теперь я хочу найти все файлы в каталоге dir, которые старше 7 дней, кроме файлов в file.lst.Как я могу изменить команду поиска или удалить все записи в file.lst из результата?

Пример:

file.lst:

a
b
c

Выполнить:

find -mtime +7 -print > found.lst

found.lst:

a
d
e

так что я ожидаю:

d
e

Ответы [ 2 ]

26 голосов
/ 05 сентября 2011

Передайте вашу команду find через grep -Fxvf:

find -mtime +7 -print | grep -Fxvf file.lst

Что означают флаги:

-F, --fixed-strings
              Interpret PATTERN as a list of fixed strings, separated by newlines, any of which is to be matched.    
-x, --line-regexp
              Select only those matches that exactly match the whole line.
-v, --invert-match
              Invert the sense of matching, to select non-matching lines.
-f FILE, --file=FILE
              Obtain patterns from FILE, one per line.  The empty file contains zero patterns, and therefore matches nothing.
3 голосов
/ 05 сентября 2011

Передайте команду find на grep с помощью переключателей -v и -f

find -mtime +7 -print | grep -vf file.lst > found.lst

Опции grep:

-v : invert the match
-f file: - obtains patterns from FILE, one per line

пример:

$ ls
a  b  c  d  file.lst

$ cat file.lst 
a$
b$
c$


$ find . | grep -vf file.lst 
.
./file.lst
./d
...