cara membuat ls memperlihatkan file tersembunyi kemudian direktori kemudian file teratur

1

Apakah ada cara untuk mendapatkan ls untuk menampilkan semua file dot termasuk direktori tersembunyi terlebih dahulu kemudian direktori biasa kemudian file biasa? Saya telah membaca seluruh halaman manual tetapi tidak menghasilkan apa-apa. Saya juga telah mencari pengguna Super dan meskipun ada beberapa jawaban untuk pertanyaan yang berbeda seperti menampilkan file tersembunyi terlebih dahulu atau direktori terlebih dahulu, saya belum menemukan apa pun dalam urutan ini. Terima kasih

Widgeteye
sumber

Jawaban:

0

Jawaban paling sederhana adalah membaginya menjadi dua perintah: ini paling baik dilakukan dalam skrip (seperti lssort), tetapi jika Anda ingin lsselalu bekerja dengan cara ini Anda bisa alias ls=lssort: -

ls -d --group-directories-first "$@"/.*
ls -d --group-directories-first "$@"/*

Ini mengasumsikan bahwa nama direktori tunggal (yang mungkin mengandung spasi) diberikan dan itu adalah parameter terakhir yang dilewati. Sayangnya ini memiliki dua batasan: -

  1. Direktori harus diberikan: untuk mengatasinya Anda perlu memindai parameter untuk menemukan yang terakhir dan membuat panggilan yang berbeda jika parameter terakhir adalah opsi atau tidak ada (ganti /dengan ruang dalam panggilan di atas).
  2. Jika lsopsi menyebabkan garis total (misalnya -l) menjadi output, Anda akan mendapatkan dua total, satu untuk setiap panggilan.

Yang pertama dijawab dengan skrip: -

[ $# == 0 ] && lp='' || eval lp="\${$#}"
[ "${lp#-}" == "$lp" ] && sl=/ || sl=' '
ls -d --group-directories-first "$@"$sl.*
ls -d --group-directories-first "$@"$sl*

Yang kedua mengharuskan semua file untuk dicantumkan dalam satu perintah dan output diarahkan ke file sementara dengan greppencarian berturut-turut , pertama untuk ^total [0-9]*$, kemudian untuk file yang dimulai dengan ., kemudian pencarian yang sama dengan -vdaftar sisanya. Dengan demikian mudah jika lsmenghasilkan nama file telanjang, tetapi jauh lebih kompleks dalam kasus umum, di luar cakupan jawaban ini.

Catatan: -

  • ls -d diperlukan untuk menghindari perluasan subdirektori.
  • ... && ... || ...adalah bentuk yang lebih kompak if ...; then ...; else ...; fi.
  • evaldiperlukan untuk membuat bashparse baris perintah dua kali: ${$#}memberikan kesalahan.
AFH
sumber
0

Saya akan menjawab pertanyaan saya sendiri. Setelah penelitian lebih lanjut, saya telah menemukan cara untuk mendapatkan apa yang saya inginkan.

Meskipun bukan urutan persis yang awalnya saya inginkan dalam pertanyaan, saya telah menemukan cara untuk melakukan ini dengan urutan: Semua dir termasuk tersembunyi, lalu semua file dot lalu semua file regualr. Dengan ini di .bashrc: alias d = 'LC_COLLATE = C ls -la --group-directories-first'. Dan saya senang dengan itu.

Widgeteye
sumber