LINUX.ORG.RU

Вопрос по shell


0

1

Здравствуйте!
У меня вот такой вопрос:


#!/bin/bash
while true
do
find $1 -name *.tmp -exec rm «{}» \;
ls $1 -R | awk '{size = size + $5; print size}' | tail -1;
echo
sleep $2
done


К выводимым файлам,нужно добавить их размер. Я пробовал через awk ,но не получилось,подскажите в чем ошибка?


ls $1 -R | awk '{size = size + $5; print size}' | tail -1;

Какая-то странная и ужасная конструкция и непонятная постановка задачи...
Нужно подсчитать общий размер всех файлов в каталоге(man du) или вывести в виде «имя_файла - размер_файла» (ls -l| awk '{print $9" - «$5}')?

Slavaz ★★★★★ ()
Ответ на: комментарий от tailgunner

хм....это все не подходит,сейчас попробую изложить задание:

Shell-программа периодически с некоторым интервалом удаляет все временные файлы с указанным суффиксом (например, .tmp) в поддереве, начиная с каталога, имя которого задано параметром Shell-программы и выводит при этом список оставшихся файлов в форме:

каталог <имя каталога>
<Имя файла><Длина>
<Имя файла><Длина>
каталог <имя каталога>
<Имя файла><Длина>
<Имя файла><Длина>
и тд....

zevall ()
Ответ на: комментарий от tailgunner

Думаю, что можно дать полный и исчерпывающий ответ с нужным решением задачи. Чем меньше знает студент, тем больше ценимся мы как специалисты ;)

Slavaz ★★★★★ ()
Ответ на: комментарий от Slavaz

Это же придется весь скрипт писать - лень %)

Но, чтобы первая строка давала то, что требует ТЗ, надо так:

find $dir -type d | sort | (while read dn; do echo 'Каталог' $dn; find $dn -maxdepth 1 -type f -printf '%f %s\n'; done)

tailgunner ★★★★★ ()
Ответ на: комментарий от zevall

> да,думаю это оптимальное решение)))

Ох, дождётесь однострочника «на перле»... хотя бы немного надо вникать в смысл происходящего. И хорошо, если студент с лабой, а если к серваку в каком-нить банке дорвались?

Slavaz ★★★★★ ()
Ответ на: комментарий от Slavaz

> Ох, дождётесь однострочника «на перле»...

Ну нешто ж мы звери :D

tailgunner ★★★★★ ()
Ответ на: комментарий от tailgunner

А нельзя мой код модифищировать???


!/bin/bash
while true
do
find $1 -name *.tmp -exec rm «{}» \;
ls $1 -R | awk '{size = size + $5; print size}' | tail -1;
echo
sleep $2
done

Нужно что то вместо «awk '{size = size + $5; print size}' | tail -1;» выдающее размер файла и тогда все будет просто замечательно....

zevall ()
Ответ на: комментарий от zevall

> А нельзя мой код модифищировать???
Можно. Модифицируйте.

Slavaz ★★★★★ ()
Ответ на: комментарий от zevall

> А нельзя мой код модифищировать???

Можно. Более того, у тебя есть всё, чтобы его модифицировать.

Нужно что то вместо «awk '{size = size + $5; print size}' | tail -1;» выдающее размер файла и тогда все будет просто замечательно....

Не будет. Проблема в ls -R - у его вывода нерегулярный формат.

tailgunner ★★★★★ ()
Ответ на: комментарий от lazyklimm

кто нибудь может написать что именно можно сделать,а не посылать в сторону манов.....
Я просто не могу допилить как это можно модифицировать)))

zevall ()
#!/bin/bash
while :; do
   find $1 -name '*.tmp' -delete
   find $1 -type d | xargs -L1 -I{} sh -c 'd={}; echo "каталог: $d"; find $d -printf "%f %s\n"; echo ""'
  echo ""
  sleep $2
done
sdio ★★★★★ ()

> ls $1 -R | awk '{size = size + $5; print size}' | tail -1;

Если надо размер, то не нужно ли к ls добавить ключ -l ?

sin_a ★★★★★ ()
Ответ на: комментарий от Jetty

Я конечно же выражаю всем благодарность..

Дело в том что код:

#!/bin/bash
while :; do
find $1 -name '*.tmp' -delete
find $1 -type d | xargs -L1 -I{} sh -c 'd={}; echo «каталог: $d»; find $d -printf «%f %s\n»; echo «„'
echo “»
sleep $2
done

Выдает все файлы и их размер(а требуется только в той папке,которая была указана через параметр)))) да и форма не та,в моем коде форма была нормальна,но там небыло размера.....

zevall ()
Ответ на: комментарий от zevall

> Выдает все файлы и их размер(а требуется только в той папке,которая была указана через параметр))))

Ты сам не знаешь, чего хочешь. То тебе в поддереве, то только в одном каталоге.

tailgunner ★★★★★ ()

find $1 -name '*.tmp' -delete -or -printf '%f %s\n'
?

xydo ★★ ()
Ответ на: комментарий от lazyklimm

> включи уже голову
аппарат для приёма пищи временно не доступен. Повторите попытку позже.

Slavaz ★★★★★ ()
Ответ на: комментарий от tailgunner

дак в поддереве,только он выдает не только определенные паки и файлы,а еще целую кучу различных файлов)))

zevall ()
Ответ на: комментарий от mukoh

я пробовал с du -b:

#!/bin/bash
while true
do
find $1 -name *.tmp -exec rm «{}» \;
ls $1 -R | du -b;
echo
sleep $2
done

Нужного результата не получил:(

zevall ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.