(12 jawaban)
Tutup 6 tahun yang lalu.
Saya ingin mengelompokkan setiap file dan direktori tersembunyi, tetapi bukan yang saat ini (. ) dan direktori induk (.. ).
Saya menggunakan bash.
Amati perilaku saat ini:
$ ls -a
. .. ...a ...aa ..a ..aa .a .aa .aaa a
$ echo *
a
$ echo .*
. .. ...a ...aa ..a ..aa .a .aa .aaa
Saya ingin .* berperilaku seperti ini
$ echo .*
...a ...aa ..a ..aa .a .aa .aaa
Ada opsi shell dotglob
$ shopt -s dotglob
yang bekerja dengan cara; sekarang saya bisa menggunakan * untuk menutupi semuanya (tersembunyi atau tidak) tetapi tidak . dan ..
$ echo *
...a ...aa ..a ..aa .a .aa .aaa a
tapi sekarang saya tidak bisa membedakan antara tersembunyi atau tidak. Juga, .* masih menggumpal . dan ..
$ echo .*
. .. ...a ...aa ..a ..aa .a .aa .aaa
Apakah ada cara untuk membuat .* tidak diperluas ke . dan .. ?
Jawaban yang Diterima:
Anda dapat menggunakan GLOBIGNORE variabel untuk menyembunyikan . dan .. direktori. Ini juga secara otomatis mengatur dotglob pilihan, jadi * sekarang cocok dengan file tersembunyi dan tidak tersembunyi. Anda dapat kembali secara manual menghapus dotglob , namun, ini kemudian memberikan perilaku yang Anda inginkan.
Lihat contoh ini:
$ ls -a
. .. a .a ..a
$ GLOBIGNORE=".:.."
$ shopt -u dotglob
$ echo * # all (only non-hidden)
a
$ echo .* # all (only hidden)
.a ..a