Tomsk Sysadmins Forum

Unix => Программирование => Topic started by: vukor on January 18, 2006, 17:05:11

Title: Shell-скриптинг
Post by: vukor on January 18, 2006, 17:05:11
Приветствую.

Я новичок в программировании на шеле.

Ситуация следующая - в определенном каталоге лежат файлы.

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

Пример:

В каталоге - file1, file2 и т.д.
В скрипте - $var1 = file1, $var2 = file2 и т.д.

Приведите пример кода пожалуйста.

P.S. заранее благодарен.
Title: Shell-скриптинг
Post by: Safir on January 18, 2006, 18:11:31
А зачем оно надо? Что этот скрипт должен делать? Просто может быть гораздо более простой путь для решения твоей задачи :).
Title: Shell-скриптинг
Post by: demiurg on January 18, 2006, 18:12:52
Quote
Приветствую.

Я новичок в программировании на шеле.

Ситуация следующая - в определенном каталоге лежат файлы.

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

Пример:

В каталоге - file1, file2 и т.д.
В скрипте - $var1 = file1, $var2 = file2 и т.д.

Приведите пример кода пожалуйста.

P.S. заранее благодарен.
[snapback]6973[/snapback]
Вопрос -- зачем? Как потом этим пользоваться? Ведь сколько файлов в каталоге заранее не известно.
Code: [Select]
for i in *;do
  do_something_with $i;
done
позволит в цикле произвести операции со всеми файлами и каталогами из текущего каталога.
Code: [Select]
for i in `find -type f`;do
  do_something_with $i;
done
сделает тоже самое, но рекурсивно и только с файлами.
хотя использовать find лучше например так
Code: [Select]
find -type file -exec do_something_with {} \;проблем с файлами содержащими в имени пробелы не будет.
Можно просто плучить список файлов
FILE_LIST=*
а потом его использовать по своему усмотрение
например
Code: [Select]
FILE_LIST=*;set $FILE_LIST;echo первый файл $1;
Title: Shell-скриптинг
Post by: vukor on January 18, 2006, 20:07:52
Ребята, сасибо за ответы. Буду пробовать.

Вообще, зачем ?

Опишу задачу.

Очень часто приходится склеивать один определенный видеофайл с другими.
Т.е. на входе - видеофайл и видеофайл1, видеофайл2 и т.д.
На выходе надо получать - видеофайл+видеофайл1, видеофайл+видеофайл2 и т.д.

Вот и захотелось автоматизировать этот процесс. А то на VirtualDub'е, признаться, запарился..
Нашел программку под unix, точнее набор пакетов - transcode. Там есть программа avimerge. Работает так:

#avimerge -i видеофайл.avi видеофайл1.avi -o new_input1.avi

Получаем новый видеофайл.

Так вот, этих видеофайлов  - тьма, т.е. много.
Title: Shell-скриптинг
Post by: demiurg on January 18, 2006, 20:41:44
Quote
Нашел программку под unix, точнее набор пакетов - transcode. Там есть программа avimerge. Работает так:

#avimerge -i видеофайл.avi видеофайл1.avi -o new_input1.avi

Получаем новый видеофайл.

Так вот, этих видеофайлов  - тьма, т.е. много.
[snapback]6977[/snapback]
Code: [Select]
avimerge -i *.avi -o new_input1.aviсклеит все avi из текущего каталога, расположив их в алфавитном порядке.

Title: Shell-скриптинг
Post by: One on January 25, 2006, 12:52:47
А если всё равно MPlayer пользуете, то можно mencoder'ом влёгкую: не нужно держать доп. пакет :) если чисто для склейки.