Его немного сложно, проверьте, работает ли он для вас
select a.id,if(a.parent = 0,@varw:=concat(a.id,','),@varw:=concat(a.id,',',@varw)) as list from (select * from recursivejoin order by if(parent=0,id,parent) asc) a left join recursivejoin b on (a.id = b.parent),(select @varw:='') as c having list like '%19,%';
Ссылка на скрипт SQL http://www.sqlfiddle.com/#!2/e3cdf/2
Замените имя поля и таблицы соответствующим образом.
Это сделает это:
total=0
for file in *.txt
do
space=$(ls -l "$file" | awk '{print $5}')
let total+=space
done
echo $total
macOS
du
и параметр -I
, чтобы исключить все остальные файлы Linux
-X, --exclude-from=FILE
exclude files that match any pattern in FILE
--exclude=PATTERN
exclude files that match PATTERN
Вот способ сделать это (в Linux, используя GNU coreutils du
и синтаксис Bash), избегая плохой практики :
total=0
while read -r line
do
size=($line)
(( total+=size ))
done < <( find . -iname "*.txt" -exec du -b {} + )
echo "$total"
Если вы хотите исключить текущий каталог, используйте -mindepth 2
с find
.
Другой версия, которая не требует синтаксиса Bash:
find . -iname "*.txt" -exec du -b {} + | awk '{total += $1} END {print total}'
Обратите внимание, что они не будут работать должным образом с именами файлов, которые включают символы новой строки (но с пробелами будут работать).
GNU find,
find /home/d -type f -name "*.txt" -printf "%s\n" | awk '{s+=$0}END{print "total: "s" bytes"}'
найти папку1 папку2 -iname '* .txt' -print0 | du --files0-from - -c -s | tail -1
Основываясь на ennuikiller, это будет обрабатывать пробелы в именах. Мне нужно было сделать это и получить небольшой отчет:
find -type f -name "* .wav" | grep экспорт | ./calc_space
#!/bin/bash
# calc_space
echo SPACE USED IN MEGABYTES
echo
total=0
while read FILE
do
du -m "$FILE"
space=$(du -m "$FILE"| awk '{print $1}')
let total+=space
done
echo $total