Saya ingin mencari di mana file (dengan nama file yang diketahui sebagian) ada di sistem file. Saya ingin tahu bagaimana melakukan ini dari baris perintah, daripada menggunakan utilitas GUI.
Di Windows, saya menjalankan yang berikut ini:
cd /d C:\
dir *filename* /s
Apa yang setara dengan Linux?
ls
?Jawaban:
(Baca terus untuk syarat dan ketentuan utama. Baca manual untuk cetakan halus.)
Daftar isi direktori adalah jenis fitur sekunder
ls
. Pekerjaan utamals
, salah satu yang paling rumit, adalah menyempurnakan tampilannya. (Lihatlah manual dan membandingkan jumlah pilihan yang berhubungan dengan memilih file apa untuk menampilkan vs jumlah pilihan yang kontrol apa informasi ke layar tentang setiap file dan bagaimana tampilan diformat. Hal ini berlaku baik dari ls GNU yang Anda' akan ditemukan di Linux, dan sistem lain dengan pilihan lebih sedikit, sejak awal .)Mode default
ls
adalah ketika Anda mengirimkannya direktori, itu daftar file dalam direktori itu. Jika Anda meneruskannya jenis file lain (file biasa, tautan simbolik, dll.), Itu hanya daftar file itu. (Ini berlaku untuk setiap argumen secara terpisah.) Opsi-d
memberitahuls
tidak pernah turun ke direktori.ls
memang memiliki opsi-R
yang memberitahu itu untuk membuat daftar direktori secara rekursif. Tetapi penerapannya terbatas, dan tidak memungkinkan banyak penyaringan pada output.Alat pertama yang melakukan pencocokan pola adalah shell itu sendiri. Anda tidak memerlukan perintah lain: cukup ketik wildcard Anda dan Anda siap. Ini dikenal sebagai globbing .
Secara tradisional, wildcard terbatas pada direktori saat ini (atau direktori yang ditunjukkan:)
echo /some/where/*filename*
. A*
cocok dengan nama file apa pun, atau bagian mana pun dari nama file, tetapi*.txt
tidak akan cocokfoo/bar.txt
. Kerang modern telah menambahkan pola**/
yang berarti "dalam direktori ini, atau dalam direktori apa pun di bawahnya (secara rekursif)". Dengan bash, untuk alasan kompatibilitas historis, fitur ini perlu diaktifkan secara eksplisitshopt -s globstar
(Anda dapat meletakkan baris ini di Anda~/.bashrc
).The
echo
perintah hanya menggemakan daftar nama file yang dihasilkan oleh shell kembali pada Anda. Sebagai pengecualian, jika tidak ada nama file yang cocok sama sekali, pola wildcard dibiarkan tidak berubah dalam bash (kecuali jika Anda mengaturshopt -s nullglob
, dalam hal ini pola meluas ke daftar kosong), dan zsh memberi sinyal kesalahan (kecuali Anda mengatursetopt nullglob
, atausetopt no_no_match
yang menyebabkan pola dibiarkan tidak berubah).Anda mungkin masih ingin menggunakan
ls
untuk opsi-opsinya. Misalnya,ls
dapat memberikan indikasi tentang sifat atau izin file (direktori, executable, dll.) Melalui warna. Anda mungkin ingin menampilkan tanggal, ukuran, dan kepemilikan filels -l
. Lihat manual untuk lebih banyak opsi.Perintah tradisional untuk mencari file di pohon direktori adalah
find
. Muncul dengan banyak opsi untuk mengontrol file mana yang akan ditampilkan dan apa yang harus dilakukan dengan mereka. Misalnya, untuk mencari file yang namanya cocok dengan pola*filename*
di direktori saat ini dan subdirektori dan cetak namanya:-print
adalah tindakan (sebagian besar tindakan lain terdiri dari mengeksekusi perintah pada file); jika Anda tidak melakukan tindakan,-print
tersirat. Juga, jika Anda tidak menentukan direktori apa pun untuk dilintasi (di/some/dir
atas), direktori saat ini tersirat. Kondisi-name '*filename'
mengatakan untuk mendaftar (atau bertindak) hanya file yang namanya cocok dengan pola itu; ada banyak filter lain, seperti-mtime -1
mencocokkan file yang dimodifikasi dalam 24 jam terakhir. Terkadang Anda dapat menghilangkan tanda kutip-name '*filename*'
, tetapi hanya jika wildcard tidak cocok dengan file apa pun di direktori saat ini (lihat di atas). Singkatnya, bentuk singkatnya adalahAlat lain yang bermanfaat ketika Anda tahu (bagian dari) nama file adalah
locate
. Alat ini menanyakan basis data nama file. Pada sistem yang khas, ini disegarkan setiap malam. Keuntunganlocate
lebih darifind /
itu adalah jauh lebih cepat. Kelemahannya adalah informasinya mungkin basi. Ada beberapa implementasilocate
yang berbeda dalam perilakunya pada sistem multi-pengguna:locate
program dasar hanya mengindeks file yang dapat dibaca untuk umum (Anda mungkin ingin menjalankan pendampingupdatedb
untuk membuat database kedua yang mengindeks semua file di akun Anda); ada versi lain (mlocate, slocate) yang mengindeks semua file danlocate
program menyaring database untuk hanya mengembalikan file yang dapat Anda lihat.Terkadang Anda berpikir bahwa file disediakan oleh paket dalam distribusi Anda, Anda tahu (bagian dari) nama file tetapi bukan nama paket Anda, dan Anda ingin menginstal paket. Banyak distribusi menyediakan alat untuk itu. Di Ubuntu, itu
apt-file search filename
. Untuk perintah yang setara pada sistem lain, periksa Pacman Rosetta .sumber
setara dengan contoh DOS Anda adalah:
Di Linux, Anda biasanya tidak membutuhkan
-print
argumen, lagi. Jika Anda menemukan diri Anda bekerja pada sistem operasi lain, mungkin berguna untuk mengetahuinya.sumber
Jika Anda menginginkan sesuatu yang "cepat" , tetapi tidak dalam situasi kritis misi dan Anda hanya ingin tahu apakah itu ada dan di mana itu, Anda dapat menggunakannya
locate
. Itu menyimpan basis data semua file di direktori yang telah Anda suruh untuk mengumpulkan informasi.Dalam pemasangan default (di Ubuntu),
locate
aturcron
pekerjaan harian yang memindai sistem file dan memperbarui basis data ...Jika Anda merasa perlu memperbarui basis data sebelum pembaruan cron berikutnya, biasanya lebih cepat dari
find
atauls
hanya menjalankansudo updatedb
lalulocate
. Sudah pasti lebih cepat jika Anda perlu melakukan lebih banyak pencarian ... seperti namanya,updatedb
memperbarui database yanglocate
menggunakan ...locate
memiliki built-in regex, yang membuatnya sangat berguna ... Saya akan menggunakanfind
skrip, tapi saya jarang menggunakannyafind
di commandline. Saya bahkan menggunakanlocate
skrip (pribadi) ... mis.locate -bir "oo.*datt.*mp4$"
locate
mengembalikan jalur yang sepenuhnya memenuhi syarat dari file yang cocok.sumber
Sebagai contoh, jika saya ingin mencari direktori / home untuk nama file yang mengandung foo, saya akan menggunakan perintah:
gunakan perintah
man find
untuk info lebih lanjut tentang perintah temukan dan argumen,sumber
*
s untuk mencegah shell menafsirkannya.