Klasörlerde ve alt klasörlerde .sql uzantılı tüm dosyaları arayın


17

Klasörler ve alt klasörler (özyinelemeli) .sql uzantılı tüm dosyaları aramak istiyorum.

Bunu nasıl yapabilirim?

Yanıtlar:


29

Veya...

find $directory_name -name \*.sql

Örneğin

find / -name \*.sql

Veya

find ~ \*.sql

(burada ~ / home / kullanıcı adınız / ifadesine eşittir) veya ...

find /usr/local/share/ \*.sql

ve benzerleri.


2

Bunu komut satırında çalıştırın:

cd / && find | grep '\.sql$'

'/' Öğesini aramak istediğiniz dizine değiştirin.

findKomut (ekstra seçenekler kullanılarak) grep olmadan görevi başarmak mümkün, ama yukarıdaki kullanım daha uygun buluyorum.

Sırayla, yukarıdaki komut:

  1. Geçerli dizini kök dizine değiştirir ( cd /)
  2. Geçerli dizindeki ve altındaki tüm dosyaları ve dizinleri listeler ( find)
  3. Dosya ve dizinleri '.sql' ( | grep '\.sql$') ile biten herhangi bir şey için filtreler

teşekkürler, açıklayabilir misin? grep kullanarak ve bulmak için çıktı geçen?
Blankman

Aslında tam tersi. Bul ve çıktısını grep'e aktarıyorum. Yukarıda daha ayrıntılı bir açıklama ekledim.
Barbarrosa

bu bir Mac üzerinde de çalışır mı? Denedim 'bul | grep '\ .sql $' ve kullanım yardımı bilgilerini çıktı.
Blankman

find güçlü bir araçtır ve gerçekten grep için çıkış boru gerekmez. Bu güzel bir bağlantı - content.hccfl.edu/pollock/unix/findcmd.htm
Panther

1
findzaten filtre özelliklerine sahip
enzotib

1

Bu eski bir yazı olduğunu biliyorum, ama ben bu konuda oldukça yeniyim ve bir dizinde ve alt alt dizinlerinde belirli bir uzantı tüm dosyaları bulmak için kolay bir yol bulduk. İlk önce parent Directoryo zaman gidin find . -name '*.sql've bu size dizinlerde ve alt dizinlerinde .sql uzantılı tüm dosyaları bulacaksınız .

Benim durumumda , dizin ve alt dizinlerindeki tüm .xml dosyalarını silmek istedim , bu yüzden daha fazlasını yaptım, burada olduğu gibi kaldırmayı ekledimfind . -name '*.xml' | xargs rm

Umarım bu yardım eder :)


2
find-deletekomutu anlar . Katılmaya gerek yok rm. Veya -execkomutu bir borudan dolambaçsız olarak doğrudan çağırmak için kullanabilirsiniz xargs.
David Foerster

0
locate -br \\.sql$ | egrep '^/folder/path/'

Yüklü değilse, daha önce şununla yükleyin:

sudo apt install mlocate

Bu, mlocate.dbUbuntu'da (blieve) kullanıma hazır olmayan güncel bir örnek gerektirir . Ayrıca, neden basit değil locate '/folder/path/*.sql'?
David Foerster

Belirttiğiniz gibi denedim ama işe yaramıyor, sanırım regex in locatekullanılan egrep
regex'den

locate/folder/path/*.sqlnormal ifadelerle değil, glob ifadelerle eşleşir .
David Foerster

üzgünüm, ama man locateben -r, --regexp REGEXP - Search for a basic regexp REGEXPbu yüzden bir regex olduğunu varsayalım. Her neyse, "küresel ifadenizi" denedim ama işe yaramıyor, üzgünüm
Vzzarr

Lütfen seçenek sözdiziminden kiraz seçimine başlamadan önce açıklamanın en az birkaç cümlesini okuyun: “ --regexBelirtilmezse, PATTERNs globbing karakterler içerebilir.” ( Kaynak )
David Foerster
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.