Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: программирование bash  (Прочитано 936 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Aleks.Sinjavin

  • Автор темы
  • Любитель
  • *
  • Сообщений: 86
    • Просмотр профиля
программирование bash
« : 11 Февраля 2014, 11:31:47 »
хочу сделать файлы размером не более 25 мегабайт для прослушивания аудио книг. на жестком диске файлы не более 4МБ поместить в отдельные директории (mkdir). выполнить для них (в отдельной директории) ./01/cat * > 01.mp3  ./02/cat * > 02.mp3 ... , затем запустить ffmpeg...


пока получилось это:

#!/bin/bash
for i in *.mp3
do
  FILESIZE=$(stat -c %s "$i")
  OLDSIZE=$OLDSIZE + $FILESIZE
  echo "Size of $i = $FILESIZE bytes."
  echo "$OLDSIZE"
done

не знаю как объявить переменную OLDSIZE. надо чтобы она была не более 25МБ. OLDSIZE должна хранить размер файлов сохраняемый в директорию ./01/
« Последнее редактирование: 11 Февраля 2014, 11:35:02 от alekssinjavin »

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
Re: программирование bash
« Ответ #1 : 11 Февраля 2014, 11:53:36 »
Цитировать
  OLDSIZE=$OLDSIZE + $FILESIZE
let OLDSIZE=OLDSIZE + FILESIZEили
OLDSIZE=$((OLDSIZE + FILESIZE))------------
25мб
if ((OLDSIZE>250000));then
...
...
...
fi
« Последнее редактирование: 11 Февраля 2014, 12:15:32 от victor00000 »
Wars ~.o

Оффлайн Aleks.Sinjavin

  • Автор темы
  • Любитель
  • *
  • Сообщений: 86
    • Просмотр профиля
Re: программирование bash
« Ответ #2 : 12 Февраля 2014, 09:19:14 »
#!/bin/bash
OLDSIZE=0
DIRECT=0
for i in *.mp3
do
  FILESIZE=$(stat -c %s "$i")
  OLDSIZE=$((OLDSIZE + FILESIZE))
  echo "Size of $i = $FILESIZE bytes."
  echo "$OLDSIZE"
  if ((OLDSIZE>25000000))
  then
    echo "-------------------------------------------------------------------------------------"
    mkdir $DIRECT
    echo "$OLDSIZE"
    DIRECT= $(( $DIRECT + 1 )) 
    OLDSIZE=0
  fi
done

if не разу не выполняется

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: программирование bash
« Ответ #3 : 12 Февраля 2014, 17:08:12 »
if ((OLDSIZE>25000000))if [ $OLSIZE -gt 25000000 ]
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Aleks.Sinjavin

  • Автор темы
  • Любитель
  • *
  • Сообщений: 86
    • Просмотр профиля
Re: программирование bash
« Ответ #4 : 15 Февраля 2014, 11:44:35 »
сделал, вроде работает как надо...
#!/bin/bash

OLDSIZE=0
DIRS=0
for i in *.mp3
do
  FILESIZE=$(stat -c %s "$i")
  OLDSIZE=$((OLDSIZE + FILESIZE))
  echo "Size of $i = $FILESIZE bytes."
  mkdir `printf "%04d" $DIRS`
  mv "$i" "./" + `printf "%04d" $DIRS`
  echo "$OLDSIZE"
  if [ $OLDSIZE -gt 25000000 ]
  then
    echo "-------------------------------------------------------------------------------------"
    cd `printf "%04d" $DIRS`
    cat * > "`printf "%04d" $DIRS`.mp3"
    mv "`printf "%04d" $DIRS`.mp3" "../"
    cd "../"
    DIRS=$(echo $DIRS + 1 | bc)
    echo "$OLDSIZE"
    echo "DIRS = $DIRS"
    OLDSIZE=0
  fi
done
if [ -d `printf "%04d" $DIRS` ] #последняя директория которая не равна 25М
then
#    echo the directory exists
    cd `printf "%04d" $DIRS`
    cat * > "`printf "%04d" $DIRS`.mp3"
    mv "`printf "%04d" $DIRS`.mp3" "../"
fi

только выдает ошибки :'(:


(Нажмите, чтобы показать/скрыть)

Пользователь решил продолжить мысль 15 Февраля 2014, 14:03:29:
исправил...

#!/bin/bash

OLDSIZE=0
DIRS=0
for i in *.mp3
do
  FILESIZE=$(stat -c %s "$i")
  OLDSIZE=$((OLDSIZE + FILESIZE))
  echo "Size of $i = $FILESIZE bytes."
  if [ ! -d `printf "%04d" $DIRS` ]
  then
    mkdir `printf "%04d" $DIRS`
  fi 
  mv "$i" "./`printf "%04d" $DIRS`"
  echo "$OLDSIZE"
  if [ $OLDSIZE -gt 25000000 ]
  then
    echo "-------------------------------------------------------------------------------------"
    cd `printf "%04d" $DIRS`
    cat * > "`printf "%04d" $DIRS`.mp3"
    mv "`printf "%04d" $DIRS`.mp3" "../"
    cd "../"
    DIRS=$(echo $DIRS + 1 | bc)
    echo "$OLDSIZE"
    echo "DIRS = $DIRS"
    OLDSIZE=0
  fi
done
if [ -d `printf "%04d" $DIRS` ]
then
    cd `printf "%04d" $DIRS`
#    echo the file exists
    cat * > "`printf "%04d" $DIRS`.mp3"
    mv "`printf "%04d" $DIRS`.mp3" "../"
fi

« Последнее редактирование: 15 Февраля 2014, 14:03:29 от alekssinjavin »

 

Страница сгенерирована за 0.054 секунд. Запросов: 25.