2011-09-05 12 views
13

file.lst'daki bir dosya listesi var. Şimdi tüm dosyaları, file.lst dosyasındakiler hariç 7 günden eski bir dir dizininde bulmak istiyorum. Bulma komutunu nasıl değiştirebilirim veya sonuçtan file.lst numaralı tüm girdileri kaldırabilirim?dosyaları bir listede bulunamıyor

Örnek:

file.lst:

a 
b 
c 

yürütün:

find -mtime +7 -print > found.lst 

found.lst:

a 
d 
e 

yüzden ne bekliyordunuz:

d 
e 

cevap

20

Pipe sizin find komut grep -Fxvf içinden:

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

bayraklar ne anlama: muhtemelen

Ben 'aa' gibi bir dosya adı varsa bu, cases.However çoğu maç olacak düşünüyorum
-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

Bu işe yarar mı? örn. cwd dosyasında 'a'' '/ a'' '-Fx'nın eşleşmemesine neden olur ... –

+0

Dosya listesini dinamik olarak oluşturmam gerekirse, ör. ssh ile xyz.com 'ls/var/yedeklemeler/günlük | kuyruk -10''? Bu, file.lst dosyasındaki dosya adları listesine sahip olmak yerine olurdu. Burada boruları denedim, ama bunu anlayamıyorum (boru tesisatım zayıftır). – Jacob

3

Boru -v ve -f anahtarları

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

grep seçenekleri kullanarak grep yapmak için bulma-komuta:

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

örnek:

$ ls 
a b c d file.lst 

$ cat file.lst 
a$ 
b$ 
c$ 


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

, Bu başarısız – ajreal

+0

@ajreal, true, bu olasılığı –

+0

@Fredrik daraltmak için file.lst içinde bir $ kullanabilirsiniz: sabit dize desen kullanmalısınız. 'grep -F' veya' fgrep' –