поэтому я пишу скрипт, который будет подсчитать среднее количество файлов в папке, выбранной пользователемРасчет среднего количества файлов в папке
Я просто не совсем уверен, как осуществить это ,
Первые вещи первых, мы должны установить выделение на пользовательскую папку
#!/bin/sh
# Script for folder info
#-------------------------------------------
WANTEDFOLDER=$PWD
cd
cd $1 #Go into the folder (first argument)
$WANTEDFOLDER/folderinfo.sh
# ------------------------------------------
echo "Selected directory: $PWD"
Я добавил несколько команд подобным образом, но те, которые работают так, ради удобства чтения я не буду добавлять их здесь.
Так что мне было интересно, как я мог рассчитать среднее количество файлов, находящихся внутри папок указанного каталога.
Для лучшего понимания этого, давайте создадим пример каталог
$ mkdir testdir
$ cd testdir
$ mkdir 1
$ mkdir 2
$ mkdir 3
$ cd 1
$ echo "hello" > wow.txt
$ cd ..
$ cd 2
$ echo "World"; > file.c
$ echo "file number 2" > twoinone.tex
$ cd ..
$ cd 3
$ echo "zzz" > z.txt
$ echo "zz2" > z2.txt
$ echo "zz3" ? z3.txt
Alright, так что после этого для лучшей иллюстрации, папки выглядеть примерно так
Так первых вещей первых, мы» сделаю find . -type f
Это должно напечатать следующие результаты
./1/wow.txt
./2/file.c
./2/twoinone.tex
./3/z.txt
./3/z2.txt
./3/ z3.txt
Теперь у нас есть 1 файл в каталоге 1, 2 в 2 и 3 в 3. Так сосчитать среднем она составляет (1 + 2 + 3)/3, что приводит к 2.
Это также можно записать в алгоритм
(количество всех уникальных файлов)/(количество всех уникальных каталогов)
Одно дело - рассчитать это в вашей голове, а другое - в реальном сценарии оболочки.
Другими словами, мне нужно каким-то образом преобразовать в сценарий, где он будет подсчитывать количество файлов в определенной папке, хранить их, подсчитывать все вместе, а затем в конце разделить его на количество уникальные каталоги.
Таким образом, чтобы получить количество каталогов, мы должны сделать find . -type d | wc -l
Чтобы получить количество файлов, довольно просто. мы будем просто использовать find . -type f | wc -l
Что я, однако, не знаю, как я могу сохранить эти два значения в переменной, а затем разделить их через друг друга
Кроме того, я бы в идеале предпочитают формат код в пути для конкретной линии
например. echo "Average Number of files: $(find . -type f | wc -l (somehow divide) find . -type d | wc -l)"
Любая идея, как снять этот подвиг?
Спасибо, простое и эффективное решение. Не понял, что я просто могу использовать выражение для двух отдельных команд. – Rawrplus
Это '$ ((..))', который позволяет вам делать арифметику. Обратите внимание, что это только арифметика INTEGER, поэтому, если у вас есть 5 файлов в 2 каталогах, она скажет вам, что 2 не 2,5 в среднем. –
Очень верно. Если вы ожидаете результатов non int, вы можете использовать 'dc' или' awk' для вычисления. –