Komut satırını kullanarak bir dosyanın konumunu belirlemek istiyorum. Denedim:
find . -type f -name "postgis-2.0.0"
ve
locate postgis-2.0.0
boşuna. Dosyanın dizinini belirlemek için komut nedir, adını sağladı mı?
Komut satırını kullanarak bir dosyanın konumunu belirlemek istiyorum. Denedim:
find . -type f -name "postgis-2.0.0"
ve
locate postgis-2.0.0
boşuna. Dosyanın dizinini belirlemek için komut nedir, adını sağladı mı?
Denemek find ~/ -type f -name "postgis-2.0.0"
yerine.
Kullanım .
yalnızca geçerli dizini arar. ~/
tüm giriş dizininizi arayacaktır (büyük olasılıkla indirdiğiniz yere). Eğer kullandıysan wget
kök olarak, başka bir yerde olabilir, böylece kullanabilirsiniz /
tüm dosya sistemini aramak için.
İyi şanslar
Denerdim.:
sudo find / -type d -name "postgis-2.0.0"
Bu. yalnızca geçerli dizinde arama yapmak anlamına gelir, gerçekten bilmiyorsanız her şeyi kökten aramak en iyisidir. Ayrıca, -f tipi, klasörleri değil dosyaları aramak anlamına gelir. Ekleme sudo
tüm klasörlerde / alt klasörlerde arama yapmasına izin verir.
Sözdiziminiz locate
doğru, ama kaçman gerekebilir.
sudo updatedb
ilk. Her ne sebeple olursa olsun, asla şansım yaver gitmez. locate
rağmen.
locate
tarafından yapılan dosya ve dizinlerin veritabanını kullanır updatedb
. Yani yeni bir dosya indirdiyseniz, daha fazla şansınız var updatedb
dosya ve dizin veritabanını güncelleştirmedi. Kullanabilirsiniz sudo updatedb
kullanmadan önce locate
yardımcı program.updatedb
genellikle linux sistemlerinde günde bir kez kendi başına çalışır.
Diğer cevaplar iyi, ama atlamayı buluyorum Permission denied
ifadeler bana daha net cevaplar veriyor (atlar stderr
s çalışmadığı için sudo
):
find / -type f -iname "*postgis-2.0.0*" 2>/dev/null
nerede:
/
aramanızı başlatmak istediğiniz dizin ile değiştirilebilirf
ile değiştirilebilir d
dosya yerine dizin arıyorsanız-iname
ile değiştirilebilir -name
aramanın büyük / küçük harfe duyarlı olmasını istiyorsanız*
aramada joker karakterler istemiyorsanız, arama terimindeki karakterler atlanabilirBir alternatif:
find / -type f 2>/dev/null | grep "postgis-2.0.0"
Bu şekilde, arama terimi tam dosya yolunun herhangi bir yerinde eşleşirse sonuçları döndürür, örn. /home/postgis-2.0.0/docs/Readme.txt
find, en kullanışlı Linux / Unix araçlarından biridir.
Denemek find . -type d | grep DIRNAME
Denemek find . -name "*file_name*"
değişebileceğin bir yer.'(geçerli Dizine bakın) '/' (tüm sisteme bakın) veya '~ /' (Giriş Dizinine bakın).
büyük / küçük harfe duyarlı olmasını istemiyorsanız "-name" değerini "-iname" olarak değiştirebilirsiniz.
değişebileceğin yer "dosya_adı"(ne olursa olsun başlayıp bitebilen bir dosya) dosyanın tam adına.
Bu, dosyanın yerini basitleştirmelidir:
Bu size dosyanın tam yolunu verecektir
tree -f / | grep postgis-2.0.0
Tree dizinlerin içeriğini ağaç benzeri bir biçimde listeler. bu -f
tree'ye dosyanın tam yolunu vermesini söyler. konumu veya üst konumu hakkında hiçbir fikrimiz olmadığından, dosya sistemi kökünden arama yapmak iyi olur /
yinelemeli olarak aşağı doğru.Daha sonra sözümüzü vurgulamak için çıktıyı grep'e göndeririz, postgis-2.0.0
Karşın find
komut, dizin ağacını yinelemeli olarak geçmenin en basit yoludur, başka yollar da vardır ve özellikle varsayılan olarak Ubuntu ile birlikte gelen iki betik dili zaten bunu yapma yeteneğine sahiptir.
bash
çok güzel bir tadı var globstar
dizin ağacının özyinelemeli geçişine izin veren kabuk seçeneği. Tek yapmamız gereken, ürünün içinde olup olmadığını test etmektir. ./**/*
genişleme bir dosyadır ve istenen metni içerip içermediği:
bash-4.3$ for f in ./**/* ;do [ -f "$f" ] && [[ "$f" =~ "postgis-2.0.0" ]] && echo "$f"; done ./testdir/texts/postgis-2.0.0
Perl, dizin ağacının özyinelemeli geçişini gerçekleştirmeye ve alt yordam aracılığıyla üzerinde belirli eylemler gerçekleştirmeye izin veren Find modülüne sahiptir. Küçük bir komut dosyasıyla, dizin ağacını geçebilir, istediğiniz dizeyi içeren dosyaları diziye itebilir ve daha sonra bu şekilde yazdırabilirsiniz:
#!/usr/bin/env perluse strict;use warnings;use File::Find;my @wanted_files;find( sub{ -f $_ && $_ =~ $ARGV[0] && push @wanted_files,$File::Find::name }, ".");foreach(@wanted_files){ print "$_\n"}
Ve nasıl çalışır:
$ ./find_file.pl "postgis-2.0.0" ./testdir/texts/postgis-2.0.0
Python, Ubuntu dünyasında çok yaygın olarak kullanılan başka bir betik dilidir. Özellikle, sahip olduğu os.walk()
yukarıdaki ile aynı işlemi gerçekleştirmemize izin veren modül - dizin ağacını geç ve istenen dizeyi içeren dosyaların listesini al.
Tek astar olarak bu şekilde yapılabilir:
$ python -c 'import os;print([os.path.join(r,i) for r,s,f in os.walk(".") for i in f if "postgis-2.0.0" in i])' ['./testdir/texts/postgis-2.0.0']
Tam komut dosyası şöyle görünürdü:
#!/usr/bin/env pythonimport os;for r,s,f in os.walk("."): for i in f: if "postgis-2.0.0" in i: print(os.path.join(r,i))
$ find . -type f | grep IMG_20171225_*
Verir./03-05--2018/IMG_20171225_200513.jpg
Komuttan sonraki nokta find
bir başlangıç noktası belirtmektir,
Dolayısıyla - geçerli klasör,
ad filtresinden "borulu" (= filtrelenmiş) IMG_20171225_*
‘locate’ komutu iyi, sadece updatedb
komutunu kullanarak önce locatedb’yi güncelleyin
Zaten yüklüyse, yeni dosya adı artık ‘postgıs-2.0.0’ olmayabilir. Genellikle paket yöneticileri aracılığıyla kurulumdan sonra, yürütülebilir dosyalar $ PATH
klasörlerinden birinde olur, konumu görmek için hangi postgıs'i
deneyin. Hiçbir şey döndürmezse, ancak o zaman dosya konumunu manuel olarak aramalısınız.