Apakah ada cara untuk membatasi jumlah file yang terdaftar pada suatu ls
perintah?
Saya telah melihat:
ls | head -4
tetapi untuk mendapatkan head
atau tail
dieksekusi saya harus menunggu untuk ls
menyelesaikan eksekusi, dan dengan direktori dengan jumlah file yang sangat besar yang dapat memakan waktu cukup lama.
Saya ingin menjalankan ls
perintah yang membatasi tanpa menggunakan head
perintah itu.
command-line
ls
limit
AndreDurao
sumber
sumber
ls -U
tidak harus membaca seluruh direktori sebelum dicetak. Cobastrace -e getdents,write ls -U > /dev/null
di direktori besar misalnya.Jika versi Anda
ls
memiliki cara untuk tidak menyortir file, seperti-U
untuk GNU ls , gunakan. Tanpa opsi,ls
pertama akan membaca semua file, lalu mengurutkan nama, lalu mulai mencetak.Kemungkinan lain adalah menjalankan
find
, yang mencetak nama saat menemukannya.(perhatikan bahwa karena
head
bekerja pada baris , yang mengasumsikan nama file tidak mengandung karakter baris baru).sumber
find
(tidak seperti busybox atau heirloomfind
atau GNUls -U
), sepertinya GNU membaca seluruh direktori sebelum mulai mencetak.Mungkin Anda membutuhkan alat selain
ls
?Misalnya, Randal Schwartz memiliki entri blog tentang penggunaan
perl
pada direktori besar yang mungkin berisi beberapa petunjuk untuk membangun sesuatu yang memenuhi kebutuhan Anda.Dalam posting blog Randal menjelaskan bahwa keduanya
ls
danfind
berusaha untuk membaca di semua entri direktori sebelum mencetak, sementaraperl
solusi yang ia usulkan tidak.sumber
perl
mungkin menggunakanreaddir(3)
likels
ataufind
.readdir(3)
pada versi saat ini dari GNU / Linux setidaknya tidak memanggilgetdents()
system call dengan besar count (yang benar-benar tidak umum mengoptimalkan kinerja dengan mengurangi jumlah panggilan sistem yang dibuat). Tetapi dalam kasus Anda, jika Anda menginginkan lebih sedikit file, sepertinya Anda harus memreaddir
- bypass dan menggunakan BSDgetdirentries(3)
ataugetdents(2)
sistem call saja.Jika kinerja bukan masalah (seperti dalam pertanyaan yang ditutup sebagai duplikat yang satu ini), dan Anda ingin membuat daftar file n pertama (sebagai lawan dari n baris pertama dari output
ls
) dalam daftar non- file tersembunyi diurutkan berdasarkan nama file, denganzsh
, Anda dapat menggunakan:untuk mendaftar 4 file pertama.
zsh
masih akan membaca seluruh isi direktori, walaupun Anda menyuruhnya untuk tidak menyortirnya*(oN[1,4])
(catat ituls
juga mengurutkan daftar itu).sumber
Mungkin kurang cocok untuk kebutuhan Anda?
Bagi saya, ini bekerja secara instan pada laptop berusia 5 tahun dengan HDD klasik, tetapi head-nya juga sama cepatnya.
Anda dapat mengakhiri
less
prematur dengan q.Saya kira asumsi Anda tentang sumber keterlambatan 1s salah, tapi mungkin tergantung pada rasa Unix Anda atau shell Anda, kurang atau perintah kepala.
Di Linux, dengan GNU-ls,
mulai mengeluarkan segera bagi saya, sementara seluruh keluaran berjalan dan berjalan - jadi sudah pasti tidak selesai, sebelum mulai lebih sedikit. Anda mungkin memeriksa, apakah Anda memiliki penundaan konstan 1s atau mungkin lebih, tergantung pada output atau tidak.
Saya kira keterlambatan 1s Anda memiliki alasan yang berbeda, mungkin HDD akan tidur dan perlu bangun?
Apakah Anda memiliki penundaan untuk beberapa file juga?
sumber
ls
hasil. Saya sedang mencari cara untuk membatasi hasil qty.sumber
ls
perintah di bash. Pipa perintah sepertigrep
,head
,tail
atau orang lain dieksekusi setelahls
akan melakukan tugas mengambil
n
file pertama .n
adalah jumlah file yang ingin Anda ekstrak. jadi kode yang lengkap adalah:sumber
ls | cut -f 1,n file
perintah Anda disarankan akan output field pertama dan n pada setiap baris teks difile
, dan akan benar-benar mengabaikan outputls
. Ini tidak melakukan apa yang dibutuhkan poster asli.