find files not in a list

后端 未结 2 1551
故里飘歌
故里飘歌 2021-02-04 03:29

I have a list of files in file.lst. Now I want to find all files in a directory dir which are older than 7 days, except those in the file.lst

相关标签:
2条回答
  • 2021-02-04 03:47

    Pipe your find command through grep -Fxvf:

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

    What the flags mean:

    -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.
    
    0 讨论(0)
  • 2021-02-04 04:00

    Pipe the find-command to grep using the -v and -f switches

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

    grep options:

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

    example:

    $ ls
    a  b  c  d  file.lst
    
    $ cat file.lst 
    a$
    b$
    c$
    
    
    $ find . | grep -vf file.lst 
    .
    ./file.lst
    ./d
    
    0 讨论(0)
提交回复
热议问题