(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