Bagaimana menghitung jumlah folder dalam direktori tertentu. Saya menggunakan perintah berikut, tetapi selalu memberikan perintah tambahan.
find /directory/ -maxdepth 1 -type d -print| wc -l
Misalnya, jika saya memiliki 3 folder, perintah ini menyediakan 4. Jika berisi 5 folder, perintah tersebut menyediakan 6. Mengapa demikian?
Jawaban:
find
juga mencetak direktori itu sendiri:Sebagai gantinya, Anda dapat menguji turunan direktori dan tidak turun ke dalamnya sama sekali:
Anda juga bisa menggunakan
ls
:sumber
$ ls -l .vim
dengan PHP? Atau bagaimana cara mendapatkan totalnya saja, tanpa daftar. Maksud saya, dalam hal ini dapatkan saja52
?(ls).Count
ls -l | grep -c ^d
sangat sederhana dan berhasil. @Pathros mungkin ada cara yang lebih baik di PHP, tetapi kasus terburuk di PHP Anda selalu dapat menggunakan fungsi shell_exec () untuk menjalankan baris perintah dan mengembalikan hasil ke string. yaitu$dirCount = shell_exec('ls -l | grep -c ^d');
Dapatkan hitungan hanya direktori di direktori saat ini
echo */ | wc
Anda akan keluar seperti
1 309 4594
2nd digit
mewakili no. direktori.atau
tree -L 1 | tail -1
sumber
zsh: no matches found: */
membutuhkan nullglobecho
. ketikwhich echo
echo */ | wc -w
Untuk menemukan
-mindepth
berarti jumlah total recusive di direktori-maxdepth
berarti jumlah total recusive di direktori-type d
berarti direktoriDan untuk
wc -l
cara menghitung garis inputsumber
find . -mindepth 1 -maxdepth 1 -type d | wc -l
akan memberi Anda banyak spasi di antara angka tersebut, misalnya: `` 2 `Anda dapat mencegahnya dengan menggunakan ini:dir_count=`find . -maxdepth 1 -type d | wc -l | xargs`; echo $dir_count # will print just 2
dan dapat berguna untuk kondisi, seperti:if (( $dir_count > 1 )); then echo "Yaa"; fi # will print "Yaa"
Jika Anda hanya memiliki direktori di folder dan tidak ada file, ini melakukannya:
sumber
Cara terbaik untuk menavigasi ke drive Anda dan cukup jalankan
dan untuk menemukan semua folder secara total, termasuk subdirektori?
... atau temukan semua folder di direktori root (tidak termasuk subdirektori)?
Bersulang!
sumber
-lR
mengabaikan direktori yang diawali titik sambilfind -type d
menghitungnya. Jadi hitungan yang diberikan oleh perintah pertama salah jika Anda memiliki direktori yang diawali titik (misalnya Anda memiliki subdirektori .git!). Anda tidak bisa begitu saja menggunakan-lRa
karena Anda juga mendapatkan untuk setiap direktori.
dan..
entri. Ini juga berlaku untuk jawaban @Pavel AnossovJalankan
stat -c %h folder
dan kurangi 2 dari hasilnya. Ini hanya menggunakan satu subproses dibandingkan dengan 2 (atau bahkan 3) yang dibutuhkan oleh sebagian besar solusi lain di sini (biasanyafind
pluswc
).Menggunakan sh / bash:
Menggunakan csh / tcsh:
Penjelasan:
stat -c %h folder
mencetak jumlah hardlink ke folder , dan setiap subfolder di bawah folder berisi entri ../ yang merupakan hardlink kembali ke folder . Anda harus mengurangi 2 karena ada dua tautan keras tambahan dalam hitungan:sumber
Saya pikir yang paling mudah adalah
di mana
images
direktori target Anda. Bendera -d membatasi direktori, dan tanda -l akan menjalankan daftar per baris, kompatibel denganwc -l
jumlah baris yang sangat familiar .sumber
man ls
,-d
tidak: "daftar direktori sendiri, bukan isinya", yaitu, jika Anda menjalankanls /tmp
, Anda akan mendapatkan apa yang ada di/tmp
, dan jika Anda menjalankanls -d /tmp
Anda hanya mendapatkan/tmp
. The-d
switch tidak menyaring direktori, seperti yang diminta.Beberapa contoh berguna:
hitung file di direktori saat ini
hitung dirs di dir saat ini
hitung file dan direktori di direktori saat ini
menghitung file dan direktori dalam satu subdirektori
Saya telah memperhatikan hal yang aneh (setidaknya dalam kasus saya):
sumber
Tidak ada direktori yang dapat kami temukan menggunakan perintah di bawah ini
ls -l | grep "^d" | wc -l
sumber
ls -l | grep ^d | wc -l
lakukan saja, tidak perlu menggunakan di"
siniSolusi pesta murni:
Jika Anda juga ingin menghitung direktori tersembunyi:
Perhatikan bahwa ini juga akan menghitung tautan ke direktori. Jika Anda tidak menginginkannya, cara ini sedikit lebih sulit.
Menggunakan
find
:Triknya adalah mengeluarkan
x
ke stdout setiap kali direktori ditemukan, dan kemudian digunakanwc
untuk menghitung jumlah karakter. Ini akan menghitung jumlah semua direktori (termasuk yang tersembunyi), tidak termasuk tautan.Metode yang disajikan di sini semuanya aman untuk karakter lucu yang dapat muncul di nama file (spasi, baris baru, karakter glob, dll.).
sumber
Menggunakan
zsh
:Ini
N
adalah nullglob,/
membuatnya cocok dengan direktori,#
menghitung. Ini akan dengan rapi mengatasi spasi di nama direktori serta mengembalikannya0
jika tidak ada direktori.sumber
Hitung semua file dan subfolder, gaya windows:
sumber
Jika Anda ingin menggunakan ekspresi reguler, cobalah:
sumber
Jawaban terbaik untuk apa yang Anda inginkan adalah
ini mengurangi satu untuk menghapus '.' yang tidak diinginkan direktori yang menemukan daftar (seperti patel deven yang disebutkan di atas).
Jika Anda ingin menghitung subfolder secara rekursif, biarkan saja opsi maxdepth, jadi
PS Jika Anda menemukan substitusi perintah jelek, menguranginya dapat dilakukan sebagai aliran murni menggunakan
sed
danbc
.Mengurangi satu dari hitungan:
atau, menambahkan hitungan ke minus satu:
sumber
Cara terbaik untuk melakukannya:
Ini memberi Anda hitungan yang sempurna.
sumber
total
? metode Anda rusak:(
. Jangan parsels
!