У меня есть папка, содержащая все мои проекты PHP, я хотел бы команду, которая выводит размер папки каждого проекта, но только для файлов *.php
внутри него. В идеале результат будет примерно таким:
project1 7,0M
project2 13,3M
...
Принятие Вас имеет папку, которая содержит только папки проекта, Вы могли выполнить следующее в той папке:
for proj in *; do
phpfiles=$(find $proj -iname '*.php')
size=$(du -ch $phpfiles | tail -n 1 | cut -d\t -f1)
echo $proj $size
done
Объяснение: мы выполняем итерации по всем папкам проекта. В каждой папке мы находим весь *.php
файлы. Мы вычисляем общий размер этих файлов и производим имя папки проекта и вычисленный размер.
В первой строке я просто использовал *
для итерации по всем папкам проекта. Это предполагает, что Ваш текущий рабочий каталог является папкой, которая содержит только папки проекта. Однако Вы могли заменить это чем-то более точным, например, for proj in /home/user/proj1 /var/www/proj2 /opt/proj3
, для итерации только по определенным папкам.
Никакая проблема:
find /var/www/site/ -type f -name "*.php" -exec du -shc {} + | tail -1 | awk '{print $1}'
можно написать сценарий этого, чтобы заставить его показать им всем:
#!/bin/bash
cd /var/www/
for i in $(find ./* -maxdepth 0 -type d)
do
prjSz=$(find $i -type f -name "*.php" -exec du -shc {} + | tail -1 | awk '{print $1}')
echo "${i:2}: $prjSz"
done