Skip to content

emka.web.id

Menu
  • Home
  • Indeks Artikel
  • Tutorial
  • Tentang Kami
Menu

Cara Melintasi Pohon Direktori di Linux

Posted on July 22, 2022 by Syauqi Wiryahasana
fatmawati achmad zaenuri/Shutterstock.com

Directories di Linux memungkinkan Anda mengelompokkan file dalam koleksi yang berbeda dan terpisah. Kelemahannya adalah berpindah dari direktori ke direktori menjadi membosankan untuk melakukan tugas yang berulang. Berikut cara mengotomatisasinya.

Semua Tentang Direktori


Perintah pertama yang Anda pelajari saat diperkenalkan ke Linux mungkin adalah ls, tetapi cd tidak akan jauh di belakangnya. Memahami direktori dan cara memindahkannya, khususnya subdirektori bersarang, adalah bagian mendasar dari pemahaman bagaimana Linux mengatur dirinya sendiri, dan bagaimana Anda dapat mengatur pekerjaan Anda sendiri ke dalam file, direktori, dan subdirektori.

RELATEDStruktur Direktori Linux, Dijelaskan

Mengambil konsep pohon direktori—dan cara berpindah di antara mereka—adalah salah satu dari banyak pencapaian kecil yang Anda lewati saat Anda membiasakan diri dengan lanskap Linux. Menggunakan cd dengan jalur membawa Anda ke direktori itu. Pintasan seperti cd ~ atau cd sendiri membawa Anda kembali ke direktori home Anda, dan cd .. memindahkan Anda satu tingkat di pohon direktori. Simple.



Namun, tidak ada cara yang sama sederhananya untuk menjalankan perintah di semua direktori dari pohon direktori. Ada berbagai cara untuk mencapai fungsi tersebut, tetapi tidak ada perintah Linux standar yang didedikasikan untuk tujuan tersebut.



Beberapa perintah, seperti ls, memiliki opsi baris perintah yang memaksanya untuk beroperasi secara rekursif, artinya perintah tersebut dimulai dalam satu direktori dan bekerja secara metodis melalui seluruh pohon direktori di bawah direktori itu. Untuk ls, ini adalah opsi -R (rekursif).



Jika Anda perlu menggunakan perintah yang tidak mendukung rekursi, Anda harus menyediakan sendiri fungsionalitas rekursifnya. Berikut cara melakukannya.



TERKAIT:37 Perintah Linux Penting yang Harus Anda KetahuibspPerintah pohon


Perintah pohon tidak akan membantu kita dengan tugas yang ada, tetapi membuatnya mudah untuk melihat struktur pohon direktori. Itu menggambar pohon di jendela terminal sehingga kita bisa mendapatkan gambaran instan tentang direktori dan subdirektori yang membentuk pohon direktori, dan posisi relatifnya di pohon.



Anda harus menginstal tree .



Di Ubuntu Anda perlu mengetik :

sudo apt install tree





Di Fedora, gunakan:

sudo dnf install tree





Di Manjaro, perintahnya adalah:

sudo pacman -Sy tree





Menggunakan pohon tanpa parameter menarik keluar pohon di bawah direktori saat ini.

treen perintah work





Opsi -d (direktori) mengecualikan file dan hanya menampilkan direktori.

tree -d work





Ini adalah cara paling mudah untuk mendapatkan pandangan yang jelas tentang struktur pohon direktori. Pohon direktori yang ditampilkan di sini adalah yang digunakan dalam contoh berikut. Ada lima file teks dan delapan direktori.

Jangan Parsing Output Dari ls ke Traverse Directories


Pikiran pertama Anda mungkin, jika ls dapat secara rekursif melintasi pohon direktori, mengapa tidak menggunakan ls untuk melakukan hal itu dan menyalurkan output ke beberapa perintah lain yang mem-parsing direktori dan melakukan beberapa tindakan?



Parsing output dari ls dianggap sebagai praktik yang buruk. Karena kemampuan di Linux untuk membuat nama file dan direktori yang berisi segala macam karakter aneh, menjadi sangat sulit untuk membuat parser.



generik yang benar secara universalAnda mungkin tidak pernah secara sadar membuat nama direktori yang tidak masuk akal seperti ini, tetapi kesalahan skrip atau aplikasi may.







Parsing nama file dan direktori yang sah tetapi tidak dipertimbangkan dengan baik adalah rawan kesalahan. Ada metode lain yang dapat kita gunakan yang lebih aman dan lebih kuat daripada mengandalkan interpretasi output ls.

Menggunakan perintah find


Perintah find memiliki kemampuan rekursif bawaan, dan juga memiliki kemampuan untuk menjalankan perintah untuk kita. Ini memungkinkan kita membangun one-liners yang kuat. Jika itu adalah sesuatu yang mungkin ingin Anda gunakan di masa mendatang, Anda dapat mengubah one-liner Anda menjadi alias atau fungsi shell.



Perintah ini secara rekursif berulang melalui pohon direktori, mencari direktori. Setiap kali menemukan direktori, ia mencetak nama direktori dan mengulangi pencarian di dalam direktori itu. Setelah selesai mencari satu direktori, ia keluar dari direktori itu dan melanjutkan pencarian di direktori induknya.

find work -type d -execdir echo "In:" {} ;





Anda bisa melihat menurut urutan daftar direktori, bagaimana pencarian berkembang melalui pohon. Dengan membandingkan output dari perintah pohon dengan output dari find one-liner, Anda akan melihat bagaimana find mencari setiap direktori dan subdirektori secara bergantian hingga mencapai direktori tanpa subdirektori. Kemudian naik kembali satu tingkat dan melanjutkan pencarian di tingkat itu.



Berikut ini bagaimana perintah dibuat.

find: Perintah find.work: Direktori untuk memulai pencarian. Ini bisa berupa path.-type d: We sedang mencari direktori.-execdir: Kami akan menjalankan perintah di setiap direktori yang kami temukan.echo “In:” {}: Ini adalah perintahnya., Kami hanya mengulang nama direktori ke terminal jendela. “{}” menyimpan nama direktori saat ini.;: Ini adalah titik koma yang digunakan untuk mengakhiri perintah. Kita perlu menghindarinya dengan garis miring terbalik agar Bash tidak menafsirkannya secara langsung.

Dengan sedikit perubahan, kita dapat membuat perintah find mengembalikan file yang cocok dengan petunjuk pencarian. Kita perlu menyertakan opsi -name dan petunjuk pencarian. Dalam contoh ini, kami mencari file teks yang cocok dengan “*.txt”, dan mengulangi namanya ke jendela terminal.

find work -name "*.txt" -type f -execdir echo "Found:" {} ;





Apakah Anda mencari file atau direktori tergantung pada apa yang ingin Anda capai. Untuk menjalankan perintah di dalam setiap direktori, gunakan -type d . Untuk menjalankan perintah pada setiap file yang cocok, gunakan -type f.



Perintah ini menghitung baris di semua file teks di direktori awal dan subdirektori.

find work -name "*.txt" -type f -execdir wc -l {} ;





TERKAIT:Cara Menggunakan Perintah find di Linux

Melintasi Pohon Direktori Dengan Script


Jika Anda perlu menelusuri direktori di dalam skrip, Anda dapat menggunakan perintah find di dalam skrip Anda. Jika Anda perlu—atau hanya ingin—melakukan pencarian rekursif sendiri, Anda dapat melakukannya juga.

#!/bin/bash shopt -s dotglob nullglob function recursive { local current_dir dir_or_file for current_dir in $1; lakukan echo "Perintah direktori untuk:" $current_dir untuk dir_or_file di "$current_dir"/*; lakukan jika [[ -d $dir_or_file ]]; lalu rekursif "$dir_or_file" else wc $dir_or_file fi done done } rekursif "$1"

Salin teks ke editor dan simpan sebagai "recurse.sh", lalu gunakan perintah chmod untuk membuatnya dapat dieksekusi.

chmod +x recurse.sh





The script menetapkan dua opsi shell, dotglob dan nullglob.



Pengaturan dotglob berarti nama file dan direktori yang dimulai dengan titik "." akan dikembalikan ketika istilah pencarian wildcard diperluas. Ini secara efektif berarti kami menyertakan file dan direktori tersembunyi di hasil pencarian kami.



Pengaturan nullglob berarti pola pencarian yang tidak menemukan hasil apa pun diperlakukan sebagai string kosong atau nol. Mereka tidak default ke istilah pencarian itu sendiri. Dengan kata lain, jika kami mencari semua yang ada di direktori dengan menggunakan wildcard asterisk “*“, tetapi tidak ada hasil, kami akan menerima string null alih-alih string yang berisi asterisk. Ini mencegah skrip mencoba membuka direktori yang disebut "*", atau memperlakukan "*" sebagai nama file.



Selanjutnya, skrip mendefinisikan fungsi yang disebut rekursif. Di sinilah hal menarik terjadi.



Dua variabel dideklarasikan, disebut current_dir dan dir_or_file . Ini adalah variabel lokal, dan hanya dapat direferensikan di dalam fungsi.



A variabel yang disebut $1 juga digunakan di dalam fungsi. Ini adalah parameter pertama (dan satu-satunya) yang diteruskan ke fungsi saat dipanggil.

RELATEDPrimer: Bash Loops: for, while, dan hingga

Script menggunakan dua for loop, satu bersarang di dalam yang lain. Loop for pertama (luar) digunakan untuk dua hal.



One adalah menjalankan perintah apa pun yang ingin Anda lakukan di setiap direktori. Yang kami lakukan di sini adalah menggemakan nama direktori ke jendela terminal. Anda tentu saja dapat menggunakan perintah atau urutan perintah apa pun, atau memanggil fungsi skrip lain.



Hal kedua yang dilakukan loop for luar adalah memeriksa semua objek sistem file yang dapat ditemukan—yang akan berupa file atau direktori. Ini adalah tujuan dari loop for dalam. Pada gilirannya, setiap file atau nama direktori diteruskan ke variabel dir_or_file.



Variabel dir_or_file kemudian diuji dalam pernyataan if untuk melihat apakah itu sebuah direktori.

Jika ya, fungsi memanggil dirinya sendiri dan meneruskan nama direktori sebagai parameter.Jika variabel dir_or_file bukan direktori, maka itu harus berupa file. Perintah apa pun yang ingin Anda terapkan ke file dapat dipanggil dari klausa else dari pernyataan if. Anda juga dapat memanggil fungsi lain dalam skrip yang sama.

Baris terakhir dalam skrip memanggil fungsi rekursif dan meneruskan parameter baris perintah pertama $1 sebagai direktori awal untuk menelusuri. Inilah yang memulai seluruh proses.



Mari kita jalankan script.

./recurse.sh work





Direktori dilintasi, dan titik dalam skrip di mana perintah akan dijalankan di setiap direktori ditunjukkan oleh baris "Perintah direktori untuk:". File yang ditemukan memiliki perintah wc yang dijalankan untuk menghitung baris, kata, dan karakter.



Direktori pertama yang diproses adalah "kerja", diikuti oleh setiap cabang direktori bersarang dari pohon.



Hal yang menarik untuk dicatat adalah Anda dapat mengubah urutannya tempat direktori diproses, dengan memindahkan perintah khusus direktori dari di atas loop for dalam menjadi di bawahnya.



Mari pindahkan baris “Directory command for:” ke setelah loop for dalam selesai.

#!/ bin/bash shopt -s dotglob nullglob function rekursif { local current_dir dir_or_file untuk current_dir di $1; lakukan untuk dir_or_file di "$current_dir"/*; lakukan jika [[ -d $dir_or_file ]]; lalu rekursif "$dir_or_file" else wc $dir_or_file fi done echo "Perintah direktori untuk:" $current_dir done } rekursif "$1"

Sekarang kita akan menjalankan skrip sekali lagi.

./recurse.sh work





Kali ini direktori memiliki perintah diterapkan pada mereka dari tingkat terdalam terlebih dahulu, mengerjakan kembali cabang-cabang pohon. Direktori yang diteruskan sebagai parameter ke skrip diproses terakhir.



Jika penting untuk memproses direktori yang lebih dalam terlebih dahulu, beginilah cara melakukannya.

Recursion Aneh


Ini seperti menelepon diri sendiri di ponsel Anda sendiri, dan meninggalkan pesan untuk diri sendiri beri tahu diri Anda kapan Anda akan bertemu lagi—berulang kali.



Perlu beberapa upaya sebelum Anda memahami manfaatnya, tetapi ketika Anda melakukannya, Anda akan melihat bahwa ini adalah cara yang elegan secara terprogram untuk mengatasi masalah sulit.



TERKAIT:Apa Itu Rekursi dalam Pemrograman, dan Bagaimana Apakah Anda Menggunakannya?



Itulah berita seputar Cara Melintasi Pohon Direktori di Linux, semoga bermanfaat. Disadur dari HowToGeek.com.
Seedbacklink

Recent Posts

TENTANG EMKA.WEB>ID

EMKA.WEB.ID adalah blog seputar teknologi informasi, edukasi dan ke-NU-an yang hadir sejak tahun 2011. Kontak: kontak@emka.web.id.

©2024 emka.web.id Proudly powered by wpStatically