Komut find . -name '*2015*' -mmin +1440 -lsmuhtemelen istediğinizi yapar. Ayrıntılar için aşağıya bakın.
İlk emriniz vardı -name 2015. Bu, işe yaramadı çünkü yalnızca adları tam olan 2015 , içinde başka karakter bulunmayan dosyaları bulur .
İkinci komutunuz, find . -name *2015* -mtime +1 -exec ls -ltrh {} \;birkaç nedenden dolayı başarısız olmuş olabilir:
1. Alıntılanmamış *karakterler kabuk tarafından genişletilir ve daha sonra 'e aktarılır find.
Doğrudan geçerli dizinde (bu find ...komutu çalıştırdığınızda bulunduğunuz dosya ) isimleri içeren 2015(ve a ile başlamamış .) herhangi bir dosya varsa, kabuk*2015* bu dosya adlarının bir listesine genişledi ve sonra geçti bu listeyi argüman olarak find. İstediğiniz bu değil - bunun yerine, *2015*kelimenin tam anlamıyla bulmak için bir argüman olarak geçmek istersiniz , böylece findkabuk değil, hangi dosyaların kendisiyle eşleştiğini bulabilir.
Bu sorunu çözmek için alıntı yapın *2015*. Bunu yapmanın üç yaygın yolu vardır:
'*2015*'(yani, find . -name '*2015*' -mtime +1 -exec ls -ltrh {} \;)
"*2015*"(yani, find . -name "*2015*" -mtime +1 -exec ls -ltrh {} \;)
\*2015\*(yani, find . -name \*2015\* -mtime +1 -exec ls -ltrh {} \;)
Ben öneririz yazmayı tek tırnak ile olduğu gibi '*2015*', çünkü:
Ancak bu durumda önemli değil. 've "her ikisi *de aynı şekilde davranır ve ifade, \alıntıyı anlamayı zorlaştıracak kadar karmaşık değildir .
2. -mtime +1yalnızca iki veya daha fazla gün önce değiştirilmiş dosyaları seçer .
As man finddiyor ki:
Numeric arguments can be specified as
+n for greater than n,
-n for less than n,
n for exactly n.
-mtime n
File's data was last modified n*24 hours ago. See the comments
for -atime to understand how rounding affects the interpretation
of file modification times.
-atime n
File was last accessed n*24 hours ago. When find figures out
how many 24-hour periods ago the file was last accessed, any
fractional part is ignored, so to match -atime +1, a file has to
have been accessed at least two days ago.
Bir dosyanın 47 saat önce değiştirildiğini varsayalım. Kaç 24 saat olduğu dönemlerde, anlamaya findmermi aşağı : öyle bir 24 saatlik dönem önce. Ancak -mtime +1yalnızca değişiklik süreleri 24 saatten daha uzun bir süre önce olan dosyalarla eşleşir . Böylece dünden gelen dosyalar eşleşmez.
Bkz. Find -mtime +1 neden yalnızca 2 günden daha eski dosyaları döndürüyor? steeldriver tarafından önerilen daha fazla bilgi için .
En son 24 saat önce herhangi bir zamanda değiştirilen dosyaları bulmak için bunun yerine 1440 dakika önce şununla belirtilmesini öneriyorum -mmin +1440:
find . -name '*2015*' -mmin +1440 -exec ls -ltrh {} \;
Bazı okuyucular neden alıntı yapmadığımı merak ediyor olabilirler {}. Bazı insanlar {}, insanlara bunun genişlemenin bir ifadesi olmadığını hatırlatmayı teklif eder . Bourne tarzı mermiler ( bash gibi ) , içinde hiçbir şey belirtilmek zorunda değildir{} . Belki Bourne tarzı olmayan bir kabuk özel olarak tedavi eder; bu yüzden bazı kullanıcılar bunu teklif eder. Ancak , bazen alıntı yapılması gereken yanlış bir kavram da vardır, bu {}nedenle -execdosya adlarını boşluklarla doğru şekilde işler. Bu s sahte: ile {}ya da '{}', findalır aynı kabuk olarak, bağımsız değişkenler tırnak kaldırır geçirmeden önce '{}'içinfind. Bu yanlış anlama karşı koymak için, teklif etmiyorum {}, ama bu bir stil meselesi - {}kabuğun nasıl davranmadığını {ve }özellikle de özel olarak işlemediğini belgelemeyi tercih ederseniz , sorun değil .
Ben de ya da değiştirmek tavsiye lskomutu veya (aynı muru önerdi ) ile değiştirin findbireyin -lseylem. ls -ltrhmuhtemelen istediğiniz her şeyi yapmaz, çünkü bulunan her dosya için ayrı çalıştırılır ve bu nedenle sıralamayı belirten -tve -rbayrakları önemsizdir.
Çıktı ,kinden biraz farklı biçimlendirilecek olsa da ls -l, -lskullanımı daha basit ve kolaydır.
find . -name '*2015*' -mmin +1440 -ls
Veya yalnızca dosyanın adlarını listelemeniz gerektiğine karar verirseniz (göreceli olarak yolları dahil .), hiçbir eylem belirtebilir ve varsayılan -printeylemin kullanılmasına neden olabilirsiniz:
find . -name '*2015*' -mmin +1440
findBölüm bana iyi görünüyor, ama ben de ile ilgili sorunlar vardı-execparametre. Bunu da çalıştıramadım. (Tüm jpg dosyalarını bir klasörden üst dizinine taşımaya çalışıyordum - ve elle yaptım ...)