Cara mencocokkan file tersembunyi di dalam direktori yang diberikan
sebagai contoh
Jika saya memberikan perintah di bawah ini tidak memberikan hasil dari file yang disembunyikan,
du -b maybehere*/*
bagaimana mencapai ini sederhana menggunakan perintah tunggal daripada menggunakan
du -b maybehere*/.* maybehere*/*
karena saya perlu mengetik mungkin di sini dua kali.
maybehere*/.*
dan tambahkan ke atas untuk semuaJawaban:
Manfaatkan ekspansi brace:
atau sebagai alternatif
Logika di balik ini mungkin tidak jelas, jadi inilah penjelasannya:
*
cocok dengan semua file yang tidak disembunyikan.[^.]
cocok dengan file yang namanya dimulai dengan satu titik diikuti dengan bukan titik; itu hanya 2 nama file karakter dalam bentuk pertama..??*
cocok dengan file tersembunyi yang panjangnya minimal 3 karakter..?*
seperti di atas, tetapi karakter kedua harus berupa titikIntinya adalah untuk mengecualikan tautan keras ke direktori saat ini dan induk (
.
dan..
), tetapi sertakan semua file normal sedemikian rupa sehingga masing-masing akan dihitung hanya sekali!Misalnya, yang paling sederhana adalah menulis
Ini berarti bahwa daftar berisi titik
.
dan "tidak ada" (tidak ada yang berada di antara,
dan menutup}
), sehingga semua file yang tersembunyi (yang dimulai dari titik) dan semua file yang tidak tersembunyi (yang dimulai dari "tidak ada") akan cocok. Masalahnya adalah ini juga cocok.
dan..
, dan ini kemungkinan besar bukan yang Anda inginkan, jadi kami harus mengecualikannya.Kata terakhir tentang ekspansi brace.
Ekspansi Brace adalah mekanisme di mana Anda dapat memasukkan lebih banyak file / string / apa pun ke baris perintah dengan menulis lebih sedikit karakter. Sintaksnya adalah
{word1,word2,...}
, yaitu daftar string yang dipisahkan koma yang dimulai dari{
dan diakhiri dengan}
.bash
manual memberikan contoh penggunaan yang sangat mendasar dan sekaligus sangat umum:sumber
{ }
saya tidak tahu :( dapatkah Anda memberi saya arahan untuk mendapatkan lebih banyak info tentang hal ituman bash
bab "Ekspansi Brace"..??*
gagal mencocokkan.a
,.b
....[^.]*
gagal mencocokkan..foo
..foo
cocok dengan keduanya.[^.]*
dan.??*
. Kamu ingin{.[!.],..?,}*
.Karena Anda sudah menggunakan sintaks khusus GNU (
-b
):Dengan begitu, itu adalah
du
daftar file dalammaybehere*
direktori (dan tidak mengecualikan file dot).-d1
membatasi pelaporan penggunaan disk ke satu level ke bawah (termasuk direktori non-dengan-a
).Kalau tidak, agar gumpalan menyertakan file tersembunyi (kecuali
.
dan..
), masing-masing shell memiliki sintaksnya sendiri:zsh
:ksh93
:bash
:tcsh
:yash
:meskipun hati-hati itu termasuk
.
dan..
pada sistem yang memasukkan mereka dalam hasilreaddir()
yang membuatnya hampir tidak dapat digunakan.sumber
Opsi lain tersedia di sini :
sumber
..
?../
dan di bawah...myfile
; tambahkan..?*
untuk itu. Tapi +1 untuk menggunakan sintaks glob yang tepat untuk kecocokan negatif.Jika Anda hanya ingin daftar direktori tersembunyi atau beroperasi pada direktori tersembunyi maka seperti yang dikatakan Costas, Anda dapat menggunakannya
du -b maybehere*/.*
Ini akan memungkinkan Anda untuk beroperasi pada file dan direktori tersembunyi. Jika Anda hanya ingin direktori tersembunyi maka Anda dapat menentukannya dengan
du -b maybehere*/.*/
sumber
maybehere*/.*
danmaybehere*/*
satu dari yang tersembunyi dan yang lain untuk yang tidak tersembunyidu -b
mengambil baik yang tersembunyi maupun yang tidak tersembunyi.Meskipun tidak langsung shell, Anda dapat menggunakan find dengan kedalaman terbatas seperti ini
sumber