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 (
findtidak menghasilkan nama file seperti itu, tetapi tidak berbahaya dan mungkin diperlukan untuk konstruksi serupa) -nameperiksa sebelum-typeperiksa karena yang terakhir terkadang membutuhkanstat- Tidak
dirnamediperlukan karena%hspecifier sudah mencetak nama direktori -quituntuk menghentikan pencarian setelah file pertama ditemukan, sehingga tidak adaheaddiperlukan 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 kefinduntuk lebih membatasi file yang Anda dapatkan. - Penyaluran melalui
head -1akan memfilter semua kecuali yang pertama. $()adalah cara untuk mengambil output dari perintah dan meletakkannya di baris perintah untuk yang lain perintah.dirnamedapat mengambil spesifikasi file lengkap dan memberi Anda bit path.cdhanya 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?