Temukan file dengan nama menggunakan baris perintah

Saya ingin menentukan lokasi file menggunakan baris perintah. Saya telah mencoba:

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

dan

locate postgis-2.0.0

tidak berhasil. Apa perintah untuk menentukan direktori file, asalkan namanya?

Coba find ~/ -type f -name "postgis-2.0.0" sebagai gantinya.

Menggunakan . hanya akan mencari direktori saat ini. ~/ akan mencari seluruh direktori home Anda (kemungkinan tempat Anda mengunduhnya). Jika Anda menggunakan wget sebagai root, kemungkinan itu bisa berada di tempat lain sehingga anda bisa menggunakan / untuk mencari seluruh filesystem.

Goodluck

Saya akan mencoba:

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

Itu . berarti cari hanya di direktori saat ini, yang terbaik adalah mencari semuanya dari root jika Anda benar-benar tidak tahu. Juga, tipe-f berarti Mencari file, bukan folder. Menambahkan sudo memungkinkan untuk mencari di semua folder / subfolder.

Sintaks Anda untuk locate benar, tetapi Anda mungkin harus menjalankan

sudo updatedb

pertama. Untuk alasan apapun, saya tidak pernah memiliki keberuntungan dengan locate meskipun.

locate menggunakan database file dan direktori yang dibuat oleh updatedb. Jadi jika Anda telah men-download file baru ada lebih banyak kesempatan bahwa Anda updatedb belum memperbarui database file dan direktori. Anda dapat menggunakan sudo updatedb sebelum menggunakan locate program utilitas.updatedb umumnya berjalan sekali sehari dengan sendirinya pada sistem linux.

Jawaban lainnya bagus, tapi saya menemukan menghilangkan Permission denied pernyataan memberi saya jawaban yang lebih jelas (menghilangkan stderrs karena tidak berjalan sudo):

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

dimana:

  • / dapat diganti dengan direktori tempat Anda ingin memulai pencarian
  • f dapat diganti dengan d jika Anda mencari direktori alih-alih file
  • -iname dapat diganti dengan -name jika Anda ingin Pencarian menjadi case sensitive
  • the *s dalam istilah pencarian dapat dihilangkan jika Anda tidak ingin wildcard dalam pencarian

Alternatifnya adalah:

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

Dengan cara ini mengembalikan hasil jika istilah pencarian cocok di mana saja di jalur file lengkap, misalnya. /home/postgis-2.0.0/docs/Readme.txt

find adalah salah satu alat Linux/Unix yang paling berguna.

Coba find . -type d | grep DIRNAME

Coba find . -name "*file_name*"

  • di mana Anda dapat mengubah '.'(lihat ke direktori saat ini) ke '/'(Lihat ke seluruh sistem) atau '~/ ' (lihat ke direktori Home).

  • di mana Anda dapat mengubah "-name" menjadi "-iname" jika Anda tidak ingin case sensitive.

  • where you can change "nama berkas"(file yang dapat dimulai dan diakhiri dengan apa pun itu) dengan nama file yang tepat.

Ini harus menyederhanakan lokasi file:

Ini akan memberi Anda path lengkap ke file

tree -f  / | grep postgis-2.0.0

Pohon daftar isi direktori dalam format seperti pohon. the -f memberitahu pohon untuk memberikan path lengkap ke file. karena kita tidak tahu lokasi atau lokasi induk, baik untuk mencari dari akar filesystem / secara rekursif ke bawah.Kami kemudian mengirim output ke grep untuk menyorot kata kami, postgis-2.0.0

Sementara find perintah adalah cara paling sederhana untuk secara rekursif melintasi pohon direktori, ada cara lain dan khususnya dua bahasa scripting yang datang dengan Ubuntu secara default sudah memiliki kemampuan untuk melakukannya.

bash

bash memiliki sangat bagus globstar opsi shell, yang memungkinkan untuk traversal rekursif dari pohon direktori. Yang perlu kita lakukan adalah menguji apakah item dalam ./**/* ekspansi adalah file dan apakah itu berisi teks yang diinginkan:

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 memiliki modul Find, yang memungkinkan untuk melakukan traversal rekursif pohon direktori, dan melalui subrutin melakukan tindakan tertentu pada mereka. Dengan skrip kecil, Anda dapat melintasi pohon direktori, mendorong file yang berisi string yang diinginkan ke dalam array, dan kemudian mencetaknya seperti itu:

#!/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"}

Dan cara kerjanya:

$ ./find_file.pl  "postgis-2.0.0"                                                       ./testdir/texts/postgis-2.0.0

Python

Python adalah bahasa scripting lain yang digunakan sangat luas di dunia Ubuntu. Secara khusus, ia memiliki os.walk() modul yang memungkinkan kita untuk melakukan tindakan yang sama seperti di atas - melintasi pohon direktori dan mendapatkan daftar file yang berisi string yang diinginkan.

Sebagai satu-kapal ini dapat dilakukan sebagai begitu:

$ 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']

Script penuh akan terlihat seperti begitu:

#!/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_*
Memberi
./03-05--2018/IMG_20171225_200513.jpg
Titik setelah perintah find adalah untuk menyatakan titik awal,
Oleh karena itu-folder saat ini,
"piped" (=difilter) melalui filter Nama IMG_20171225_*

perintah 'locate baik-baik saja, cukup perbarui locatedb terlebih dahulu, menggunakan perintah' updatedb

Jika sudah diinstal, nama file baru mungkin bukan postgis-2.0.0 lagi. Biasanya setelah instalasi melalui manajer paket, executable akan berada di salah satu folder $PATH, coba` which postgis ’ untuk melihat lokasi. Jika mengembalikan apa-apa, hanya maka Anda harus secara manual mencari lokasi file.