Суммировать все файлы sizes

Ваше первое предложение должно работать правильно. Я полагаю, единственный вариант - проверить, правильно ли вы вводите переменные (через пробел, а не через запятую). Вы можете продемонстрировать правильность кода, слегка изменив его, чтобы напечатать значения двух переменных и напечатать команду matlab вместо ее выполнения:

#!/bin/bash
echo "Please variables 1 and 2:"
read var1 var2
echo "var1=$var1, var2=$var2."
echo matlab -nodesktop -nosplash -r "functionmat($var1,$var2)"
0
25.02.2018, 04:30
5 ответов

Con GNU find y awk:

find. -maxdepth 1 -type f -printf "%s\n" | awk '{sum+=$1} END{print sum+0}'

La salida es el tamaño del archivo en bytes. La declaración final es print sum+0en lugar de solo print sumpara manejar el caso donde no hay archivos (es decir, para imprimir correctamente 0en ese caso ). Esta es una alternativa a hacer BEGIN {sum=0}.

4
28.01.2020, 02:15

Usandowc:

wc -c * 2> /dev/null

Si todo lo que se necesita es el total, haz:

wc -c * 2> /dev/null | tail -1
1
28.01.2020, 02:15

Si está buscando una forma de script basada en bash -, shell -para hacerlo, aquí hay un ciclo de shell que reúne todos los archivos (punto -archivos incluidos ), luego utiliza la utilidad GNU coreutils statpara imprimir su tamaño en una variable de suma.

shopt -s dotglob
sum=0
for f in *
do 
  [[ -f "$f" && ! -h "$f" ]] || continue
  sum=$(( sum + $(stat -c "%s" "$f") ))
done
echo $sum

Bash considera que los enlaces simbólicos son "archivos normales", por lo que debemos omitirlos con la prueba -h.

1
28.01.2020, 02:15

Так как это было очень простое упражнение, учитель потребовал, чтобы упражнения использовали базовые команды, которые требуют немного большего развития и могут быть позже заменены более мощными командами, такими как найти или стат. Но я получил ответ, и это было:

dir=$1
if [ ! -d $dir ]
then 
   exit 1
else

sum=0
cd $dir

(ls -l $dir) > fitxers.txt

C=($(awk '{print $5}' fitxers.txt))

len=${#C[*]}

i=0

while [ $i -lt $len ]
do 
    for element in $(ls $dir)
    do
        if [ -f $element ]
            then
            let "sum = $sum + ${C[$i]}"
            fi 
        (( i++ ))
    done
done
echo $sum
rm -r fitxers.txt
exit 0
fi

Надеюсь, это будет немного полезно для других новичков.

0
28.01.2020, 02:15

Мы также можем использовать приведенную ниже команду

find. -maxdepth 1 -type f -exec ls -ltr {} \;| awk 'BEGIN{sum=0} {sum=sum + $5} END {print sum}'
0
28.01.2020, 02:15

Теги

Похожие вопросы