Linux'ta pdf dosyalarını bulma komutunu bul


11

Amacım uzak bir makinedeki tüm pdf dosyalarını bulmak, bu yüzden yararlı komuta başvurmak find. Bu yüzden yazıyorum

bul ~ * .pdf
veya
bul ~ "* .pdf"
ve hiçbir şey alamıyorum. Aynısını makinemde yapıyorum ve hiçbir şey alamıyorum. Makinemdeki menüden düzenli bir arama yapıyorum ve birkaç pdf dosyası buluyorum. Birisi bana neyi yanlış yaptığımı söyler mi?


11
İyi bir yanıt almak istiyorsanız olumsuz görüşlerinizi sorunuzun dışında tutun. İlgili bir hikayede, findişe yaramaz olmaktan uzaktır.
wilhelmtell

8
Tabii ki özgür konuşma hakkına sahipsiniz. Ama iyi bir yanıt istiyorsun, değil mi? Hayır, sen yok hakkını iyi yapıcı tepki için. Bu bir ayrıcalık.
wilhelmtell

2
Kötü bir işçi daima araçlarını sorumlu tutuyor. Başka bir deyişle, saf PBCAK burada.
Pascal Thivent

5
@Wilhelmtell, bence Martin'in ifadesi adil - komut ilk etapta asla "find" olarak adlandırılmamalı, daha çok "walkpath_and_execute" gibi ... en sezgisel veya kullanıcı dostu bir arayüze sahip değil ve çok daha fazlasını yapıyor sadece dosyaları bulmaktan ziyade. Basit bir "find" ismi aldatıcıdır çünkü sahip olmadığı basit bir arayüz önerir. Tabii, bulmak işe yaramaz olmaktan uzak ve oldukça iyi çalışıyor, ancak bir "acemi", "bulun", "hangi", vb arasındaki farkı bilmediği için bir acemi suçlamak zor olabilir
Michael Aaron Safyan

1
@ Michael burada kimseyi suçlamadım; ya da daha doğrusu, burada suçlamayı yapan ben değildim. findSezgisel olduğunu bile söylemedim . Yine de aynı şeyi daha hoş bir tonda söyleyebilirim; bazen (aptalca) olumsuz yorumlara tepki veriyorum.
wilhelmtell

Yanıtlar:


30

findyararsız olmaktan çok uzaktır. Sadece düzgün kullanmıyorsunuz.

Deneyin:

find . -type f -iname '*.pdf'


@Martin - Yardım etmekten mutluluk duyarız, soruyu cevaplandığı gibi işaretlediğinizden emin olun!
Mitch Dempsey

@stepancheg Evet, neden interneti indirip basılı bir kopya yazdırmıyorsunuz?
bobobobo

9

Bulguların belgelerine bir göz atın . findKomut dolayısıyla biraz karmaşık bir arayüze sahip ve inanılmaz derecede etkili biridir ve. İstediğinizi aşağıdakilerle yapabilirsiniz:

find . -type f -iname '*.pdf' 

Yukarıdaki komut "* .pdf ile büyük / küçük harfe duyarlı olmayan bir dosya türündeki girişler için içinde bul" (ve bu tür eşleşmelerin adını yazdır) anlamına gelir. Find komutu, bulunan dosyalarda (dosya adlarını yazdırmak yerine veya yazdırmaya ek olarak) komutları yürütmek için kullanılabilir. Bununla birlikte, amaçlarınız için, locate komutuyla kendinizi daha rahat bulabilirsiniz ; bu, - updatedb kullanarak locate veritabanını oluşturduğunuzu varsayarak - dosyaları bulmayı çok kolaylaştırır. Örneğin:

locate '*.pdf'

Ayrıca locate komutunun tipik olarak find komutundan daha hızlı olduğunu göreceksiniz, çünkü locate bir dosya adı indeksi (locate veritabanı) kullanır, find ise her çağrı için hiyerarşiyi yürütecaktır.


6

Sadece aradığınızı söyleyen yüklemi kaçırıyorsunuz (ör -name.)

Ana dizinde ada göre bulmak için:

find ~ -name \*.pdf

Joker karakterin *kaçması gerektiğine dikkat edin, böylece kabuk bulmadan önce onu yorumlamaz. Kullanmak '*.pdf've "*.pdf"ile aynı etkiye sahip olacaktır \*.pdf.

Büyük / küçük harfe duyarsız bulmak için:

find ~ -iname \*.pdf

Sonuçları yalnızca dosyalarda budamak için (ad ifadesi muhtemelen sizin için bununla ilgilenir, ancak garip bir şekilde adlandırılmış dizinleriniz varsa):

find ~ -type f -iname \*.pdf

Bulmanın sembolik bağlantıları izlediğinden emin olmak için (genellikle arama yaparken bunu kendim yapmak istiyorum):

find ~ -follow -type f -iname \*.pdf

Bulduğunuz dosyalarla bir şeyler yapmak için: bunu stdout yeniden yönlendirmesini kullanarak bir dosyaya dökebilir (örn > filename. Sonunda tutturma ) veya -execbir komut çalıştırma seçeneğini kullanabilirsiniz (ayrıntılar için kılavuz sayfasına bakın). İkincisi, her dosyada bir seferde bir komut çalıştırır. xargskomutun bulunan dosyalarınızı bir kerede veya bir kerede büyük parçalar halinde başka bir komuta argüman olarak iletmesine izin vermek genellikle daha hızlıdır . Örneğin, ad-hoc (ancak unindexed) başlık dosyaları için açılır:

find ~ -follow -type f -name \*.h | xargs grep -nH "identifier"

İçinde boşluk olan dosya ve dizinleriniz varsa, son komutun düzgün çalışmasını sağlamak için son bir uzantı:

find ~ -follow -type f -name \*.h -print0 | xargs -0 grep -nH "identifier"

Aslında, "* .pdf" geçerli dizinde .pdf ile biten dosyalar varsa genişler, değil mi? (küçük nota)
Peter Jaric

1
Bash içinde değil. Bash kılavuzundan: "Karakterleri çift tırnak içine almak, [dolar], [backquote], [pipe] ve tarih genişletmesi etkinleştirildiğinde [bang] hariç olmak üzere tırnak içindeki tüm karakterlerin gerçek değerini korur. " Onaylamak için kendiniz deneyin: ls "* .txt" metin dosyaları içeren bir dizinde.
Owen S.

Evet, haklısın elbette. Bu fikri nereden bulduğumu bilmiyorum. Beni düzelttiğin için teşekkürler.
Peter Jaric

3

bu eğiticiye bir göz atın

bence yapmak istediğin şey

find . -name "*.pdf"

inameÖzelliği daha iyi koridor görüşü için kullanmalısınız
Mitch Dempsey

0

Bulguyu grep gibi ile birleştirirdim

bulmak. . | grep -i ".pdf"

belki de en verimli değil, ama işi iyi yapıyor.


Bu yapılacağının findsen aracılığıyla, istediğini doğrudan -iregex: find ~ -iregex '.*\.pdf'. Sorun, finddesende her zaman ^önde ve $arkada olduğu gibi ele alınır , bu nedenle deseninizin biraz daha karmaşık olması gerekir. Ayrıca dikkat: .modelinizde gerçekte tek bir karakter değil, tek karakterli bir joker karakter vardır.
Owen S.

0

Son x gün içinde indirmeniz gereken dosyaları bulun

find ~ -type f -iname '*.pdf' -mtime -1

büyük ve küçük harf (thats i ) ne olursa olsun ~ve ana dizinde ve aşağıda uzantısı ile pdf dosyaları bulacaksınız ve ekledim çünkü 1 gün önce değiştirildi ; -60'ı mtime'a koyarsanız, son 60 gün olacaktır..pdfinamemtime -1


0

"Bulunan" dosyalarda bir arama yapmak için şu yapı vardır:

find <dir> -type f -iname <name> -exec grep -H <string> {} \;

Exec komutu, çıkış karakterli ";" ve -H'nin grep için "string" in dosya içindeki satıra ek olarak dosya yolunu yazdırabilmesi için gereklidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.