Berikut ini harus lebih aman:
cd -- "$(find / -name ls -type f -printf '%h' -quit)"
Keuntungan:
- Danda hubung mencegah penafsiran nama direktori yang dimulai dengan tanda hubung sebagai opsi (
find
tidak menghasilkan nama file seperti itu, tetapi tidak berbahaya dan mungkin diperlukan untuk konstruksi serupa) -name
periksa sebelum-type
periksa karena yang terakhir terkadang membutuhkanstat
- Tidak
dirname
diperlukan karena%h
specifier sudah mencetak nama direktori -quit
untuk menghentikan pencarian setelah file pertama ditemukan, sehingga tidak adahead
diperlukan yang akan menyebabkan skrip gagal pada nama direktori yang berisi baris baru
Anda dapat menggunakan sesuatu seperti:
pax[/home/pax]> cd "$(dirname "$(find / -type f -name ls | head -1)")"
pax[/usr/bin]> _
Ini akan menemukan ls
pertama file biasa lalu ubah ke direktori itu.
Dalam hal apa yang dilakukan setiap bit:
- Penemuan akan dimulai pada
/
dan cari ke bawah, buat daftar semua file biasa (-type f
) disebutls
(-name ls
). Ada hal lain yang dapat Anda tambahkan kefind
untuk lebih membatasi file yang Anda dapatkan. - Penyaluran melalui
head -1
akan memfilter semua kecuali yang pertama. $()
adalah cara untuk mengambil output dari perintah dan meletakkannya di baris perintah untuk yang lain perintah.dirname
dapat mengambil spesifikasi file lengkap dan memberi Anda bit path.cd
hanya mengubah ke direktori itu.
Jika Anda menjalankan setiap bit secara berurutan, Anda dapat melihat apa yang terjadi:
pax[/home/pax]> find / -type f -name ls
/usr/bin/ls
pax[/home/pax]> find / -type f -name ls | head -1
/usr/bin/ls
pax[/home/pax]> dirname "$(find / -type f -name ls | head -1)"
/usr/bin
pax[/home/pax]> cd "$(dirname "$(find / -type f -name ls | head -1)")"
pax[/usr/bin]> _
Bagaimana cara mengatur tugas cron untuk menjalankan yang dapat dieksekusi setiap jam?
Bagaimana saya bisa mendapatkan status keyboard di Linux?