Komut satırını kullanarak isme göre bir dosya bulun

125

Komut satırı kullanarak bir dosyanın yerini belirlemek istiyorum. Denedim:

find . -type f -name "postgis-2.0.0"

ve

locate postgis-2.0.0

boşuna. Dosyanın dizinini belirleme komutu, adı verildi?

    
sordu Sam007 31.05.2012 19:02

7 cevap

154

Bunun yerine find ~/ -type f -name "postgis-2.0.0" 'yi deneyin.

. değerini kullanmak yalnızca geçerli dizini arar. ~/ , tüm ana dizininizi (muhtemelen indirdiğiniz yerde) arayacaktır. Eğer wget 'yi root olarak kullandıysanız, bunun mümkün olabileceği başka bir yerde olabilir, böylece tüm dosya sistemini aramak için / ' yi kullanabilirsiniz.

Goodluck

    
verilen cevap adempewolff 31.05.2012 19:06
28

Denerdim:

sudo find / -type d -name "postgis-2.0.0"

. sadece geçerli dizinde arama yapmak anlamına gelir, gerçekten bilmiyorsanız, kökünden her şeyi aramak en iyisidir. Ayrıca, -f, klasörleri değil dosyaları aramak anlamına gelir. % Co_de% dosyası eklendiğinde, tüm klasörlerde / alt klasörlerde arama yapmasına izin verilir.

sudo için sözdiziminiz doğru, ancak çalıştırmak zorunda kalabilirsiniz

sudo updatedb

ilk. Her ne sebeple olursa olsun, locate ile iyi şansa sahip değilim.

locate , locate tarafından yapılan dosya ve dizinlerin veritabanını kullanıyor. Dolayısıyla, yeni bir dosya indirdiyseniz, updatedb dosyanızın dosya ve dizin veritabanını güncellemediğinden daha fazla şansınız olur. % Co_de% yardımcı programını kullanmadan önce updatedb kullanabilirsiniz. sudo updatedb genellikle linux sistemlerinde tek başına günde bir kez çalışır.

    
verilen cevap reverendj1 31.05.2012 19:12
11

bulmak en kullanışlı Linux / Unix araçlarından biridir.

find . -type d | grep DIRNAME 'ı deneyin

    
verilen cevap Mitch 31.05.2012 19:11
2

Diğer yanıtlar iyidir, ancak Permission denied ifadelerinin atlanmamasının bana daha net yanıtlar verdiğini buldum ( stderr s çalışmaması nedeniyle sudo s ihmal):

find / -type f -iname "*postgis-2.0.0*" 2>/dev/null

burada:

  • / , aramanızı başlatmak istediğiniz diziyle değiştirilebilir
  • Bir dosya yerine bir dizin arıyorsanız, f d ile değiştirilebilir
  • Aramanın büyük / küçük harfe duyarlı olmasını istiyorsanız, -iname 'si -name ile değiştirilebilir
  • Aramadaki joker karakterleri istemiyorsanız arama terimindeki * s ihmal edilebilir

Alternatif:

find / -type f 2>/dev/null | grep "postgis-2.0.0"

Bu şekilde, arama terimi, tüm dosya yolunda herhangi bir yerde eşleşirse, örn. % Co_de%

    
verilen cevap zanbri 29.07.2016 17:35
2

Bu, dosyanın yerini basitleştirmelidir:

Bu size dosyanın tam yolunu verir

tree -f  / | grep postgis-2.0.0

Tree, dizinlerin içeriğini ağaç benzeri bir biçimde listeler. -f dosyası, ağaca dosyanın tam yolunu bildirmesini söyler. konum veya üst konum hakkında hiçbir fikrimiz olmadığı için, dosya sistemi kökü / 'den geriye doğru aşağı doğru arama yapmak iyidir. Daha sonra, kelimemizi vurgulamak için çıktıyı grep'e göndeririz, postgis-2.0.0

    
verilen cevap ptetteh227 18.11.2017 04:16
1

find . -name "*file_name*" 'ı deneyin

  • Burada '.' (Geçerli Dizini) 'yi' / '(tüm sisteme bakın) veya' ~ / '(Giriş Dizini'ne bakın) olarak değiştirebilirsiniz.

  • Büyük / Küçük harf duyarlı istemiyorsanız, "-name" değerini "-iname" olarak değiştirebilirsiniz.

  • Burada, " dosya_adı " dosyasını (bununla ne olursa olsun başlayıp bitebilecek bir dosya) değiştirebilirsiniz.

verilen cevap RuiVBoas 13.03.2017 11:05
0

find komutu, dizin ağacını yinelemeli olarak çaprazlamak için en basit yol olsa da, başka yollarla da vardır ve özellikle varsayılan olarak Ubuntu ile gelen iki betik dili zaten bunu yapma yeteneğine sahiptir.

bash

bash , dizin ağacının yinelemeli geçişine izin veren, çok daha iyi globstar kabuk seçeneğine sahiptir. Tek yapmamız gereken, ./**/* yayılımındaki öğenin bir dosya olup olmadığını ve istenen metni içerip içermediğini sınamaktır:

bash-4.3$ for f in ./**/* ;do [ -f "$f" ] && [[ "$f" =~ "postgis-2.0.0" ]] && echo "$f"; done 
./testdir/texts/postgis-2.0.0

Perl

Perl, dizin ağacının yinelemeli geçişini gerçekleştirmeye izin veren Find modülüne sahiptir ve altprogram aracılığıyla bunlara özel eylemler gerçekleştirir. Küçük bir komut dosyası ile dizin ağacından geçebilir, istenen dizeyi içeren dosyaları diziye ekleyebilir ve ardından şöyle yazdırabilirsiniz:

#!/usr/bin/env perl
use 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

Python, Ubuntu dünyasında çok yaygın olarak kullanılan başka bir betik dili. Özellikle, os.walk() modülüne sahiptir; bu, yukarıdaki işlemle aynı eylemi gerçekleştirmemizi ve istenen dizeyi içeren dosyaların listesini elde etmemizi sağlar.

Tek katlı 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 şu şekilde görünürdü:

#!/usr/bin/env python
import 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))
    
verilen cevap Sergiy Kolodyazhnyy 13.07.2017 04:23

Etiketlerdeki diğer soruları oku