Saya ingin menentukan lokasi file menggunakan command-line. 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?
command-line
directory
find
Sam007
sumber
sumber
locate
perintah baik-baik saja, hanya update locatedb pertama, menggunakan perintahupdatedb
postgis-2.0.0
lagi. Biasanya setelah instalasi melalui manajer paket, file executable akan berada di salah satu$PATH
folder, cobawhich postgis
lihat lokasinya. Jika tidak mengembalikan apa pun, hanya Anda harus mencari lokasi file secara manual.Jawaban:
Coba
find ~/ -type f -name "postgis-2.0.0"
saja.Menggunakan
.
hanya akan mencari direktori saat ini.~/
akan mencari seluruh direktori home Anda (kemungkinan tempat Anda mengunduhnya). Jika Anda digunakanwget
sebagai root, kemungkinan itu bisa berada di tempat lain sehingga Anda bisa menggunakannya/
untuk mencari seluruh sistem file.Semoga berhasil
sumber
wget
sebagai root, jadi/
terima kasihAku akan mencoba:
. berarti mencari hanya di direktori saat ini, yang terbaik adalah mencari semuanya dari root jika Anda benar-benar tidak tahu. Juga, ketik -f berarti mencari file, bukan folder. Menambahkan
sudo
memungkinkan untuk mencari di semua folder / subfolder.Sintaks Anda
locate
sudah benar, tetapi Anda mungkin harus menjalankannyapertama. Untuk alasan apa pun, saya tidak pernah beruntung
locate
.locate
menggunakan basis data file dan direktori yang dibuat olehupdatedb
. Jadi, jika Anda telah mengunduh file baru, kemungkinan Andaupdatedb
belum memperbarui basis data file dan direktori. Anda dapat menggunakansudo updatedb
sebelum menggunakanlocate
program utilitas.updatedb
umumnya berjalan sekali sehari dengan sendirinya di sistem linux.sumber
find adalah salah satu alat Linux / Unix yang paling berguna.
Mencoba
find . -type d | grep DIRNAME
sumber
Jawaban lainnya baik, tetapi saya menemukan
Permission denied
pernyataan menghilangkan memberi saya jawaban yang lebih jelas (menghilangkanstderr
karena tidak berjalansudo
):dimana:
/
dapat diganti dengan direktori tempat Anda ingin memulai pencarianf
dapat diganti dengand
jika Anda mencari direktori alih-alih file-iname
dapat diganti dengan-name
jika Anda ingin pencarian menjadi case sensitif*
dalam istilah pencarian dapat dihilangkan jika Anda tidak ingin wildcard dalam pencarianAlternatifnya adalah:
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
sumber
-regex
dan-iregex
sakelar untuk mencariRegular Expressions
, yang akan menemukan jalur juga menyebutkan. Saran untuk menemukan item apa pun yang merupakan file (-type f
) makagrep
sumber daya lebih mahal.Permission denied
terjadi ketika pengguna tidak memiliki akses ke file atau folder, menggunakansudo
sebelum find akan memungkinkan find untuk melihat semua file.-wholename
atau-iwholename
bukannya perpipaan kegrep
.Mencoba
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 ingin tidak ada case sensitif.
di mana Anda dapat mengubah " file_name " (file yang dapat memulai dan diakhiri dengan apa pun itu) ke nama persis file tersebut.
sumber
Ini harus menyederhanakan lokasi file:
Ini akan memberi Anda path lengkap ke file
Tree mencantumkan isi direktori dalam format mirip pohon. yang
-f
mengatakan pohon untuk memberikan path lengkap ke file. karena kita tidak tahu lokasi atau lokasi induknya, bagus untuk mencari dari root sistem file/
secara rekursif ke bawah. Kami kemudian mengirim output ke grep untuk menyorot kata kami,postgis-2.0.0
sumber
Sementara
find
perintah adalah cara paling sederhana untuk secara traverse melintasi pohon direktori, ada cara lain dan khususnya dua bahasa scripting yang datang dengan Ubuntu secara default sudah memiliki kemampuan untuk melakukannya.pesta
bash
memilikiglobstar
opsi shell yang sangat bagus , yang memungkinkan untuk melakukan traversal rekursif dari pohon direktori. Yang perlu kita lakukan adalah menguji apakah item dalam./**/*
ekspansi adalah file dan apakah itu berisi teks yang diinginkan:Perl
Perl memiliki modul Find, yang memungkinkan untuk melakukan traversal pohon direktori secara rekursif, dan melalui subrutin melakukan tindakan spesifik pada mereka. Dengan skrip kecil, Anda dapat melintasi pohon direktori, mendorong file yang berisi string yang diinginkan ke dalam array, dan kemudian mencetaknya seperti ini:
Dan cara kerjanya:
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 pohon direktori traverse di atas dan mendapatkan daftar file yang berisi string yang diinginkan.Sebagai one-liner, ini dapat dilakukan sebagai berikut:
Script lengkap akan terlihat seperti ini:
sumber
$ find . -type f | grep IMG_20171225_*
Memberi
./03-05--2018/IMG_20171225_200513.jpg
DOT setelah perintah
find
untuk menyatakan titik awal,Oleh karena itu - folder saat ini,
"piped" (= difilter) melalui filter nama
IMG_20171225_*
sumber