помогите написать скриптик на bash
Модераторы: /dev/random, Модераторы разделов
-
- Сообщения: 556
- ОС: Gentoo/MacOSX/Windows Vista
помогите написать скриптик на bash
есть 100 файлов с расшерением .flv.mpg , нужно переименовать в .mpg, уже 2-й день пытаюсь написать скрипт, который бы сделал это =)
собственно проблема в том, чтобы отрезать расширение .flv.mpg
я думал сделать так:
for i in `ls`
do
тут должна быть строчка обрезающая имена
mv $i $j.mpg
done
пробовал отрезать sed'om - получилось отрезать только первые буквы(имя)
собственно проблема в том, чтобы отрезать расширение .flv.mpg
я думал сделать так:
for i in `ls`
do
тут должна быть строчка обрезающая имена
mv $i $j.mpg
done
пробовал отрезать sed'om - получилось отрезать только первые буквы(имя)
Спасибо!
-
- Сообщения: 7
- ОС: Gentoo Linux
Re: помогите написать скриптик на bash
Код: Выделить всё
for f in *.flv.mpg
do
mv $f ${f%'.flv.mpg'}'.mpg'
done
-
- Бывший модератор
- Сообщения: 2421
- Статус: Übermensch
- ОС: лялих
Re: помогите написать скриптик на bash
Код: Выделить всё
rename '.flv.' '.' *
или, если уж хотите изврата, то можно проще сделать
Код: Выделить всё
for f in *.flv.mpg
do
mv $f ${f/.flv/}
done
слава роботам!
-
- Сообщения: 1073
- Статус: столлманист
- ОС: Debian GNU/Linux
Re: помогите написать скриптик на bash
А може тогда и мне поможете
Нужен скрипт, который просто скопирует каталог со всеми подкаталогами, но без файлов. То есть, в результате должно получится дерево пустых каталогов.

Нужен скрипт, который просто скопирует каталог со всеми подкаталогами, но без файлов. То есть, в результате должно получится дерево пустых каталогов.
"И может собственных Платонов и быстрых разумом Невтонов российская земля рождать."
М. В. Ломоносов
М. В. Ломоносов
-
- Бывший модератор
- Сообщения: 1629
- Статус: мизантроп.ка
- ОС: Gentoo
Re: помогите написать скриптик на bash
Voice
можно find'ом найти все директории (find -type d), а потом уже их скопировать.
можно find'ом найти все директории (find -type d), а потом уже их скопировать.
but in the darkness, behind your smile, you scream... © Dio
-
- Сообщения: 556
- ОС: Gentoo/MacOSX/Windows Vista
Re: помогите написать скриптик на bash
Прокоментируйте пожалуйста, не очень понятна строчка: mv $f ${f%'.flv.mpg'}'.mpg'
а так - ОГРОМНОЕ СПАСИБО, все работает
а так - ОГРОМНОЕ СПАСИБО, все работает
Спасибо!
-
- Сообщения: 3339
- ОС: Slackware 12.2, ArchLinux 64
Re: помогите написать скриптик на bash
man bash
Код: Выделить всё
${parameter%word}
${parameter%%word}
The word is expanded to produce a pattern just as in pathname
expansion. If the pattern matches a trailing portion of the
expanded value of parameter, then the result of the expansion is
the expanded value of parameter with the shortest matching pat-
tern (the ``%'' case) or the longest matching pattern (the
``%%'' case) deleted. If parameter is @ or *, the pattern
removal operation is applied to each positional parameter in
turn, and the expansion is the resultant list. If parameter is
an array variable subscripted with @ or *, the pattern removal
operation is applied to each member of the array in turn, and
the expansion is the resultant list.
$ f=abracadabra.bums
$ echo ${f%'cadabra.bums'}
abra
-
- Сообщения: 556
- ОС: Gentoo/MacOSX/Windows Vista
Re: помогите написать скриптик на bash
все понял, всем спасибо. я 2 дня колупался и шел не в том направлении
Спасибо!
-
- Сообщения: 1073
- Статус: столлманист
- ОС: Debian GNU/Linux
Re: помогите написать скриптик на bash
Придумал вот так:
Код: Выделить всё
#!/bin/bash
mkdir "wp_music"
for f in `find /music/ -type d`
do
mkdir "./wp_music/$f"
#echo "$2$f"
done
Но тут приколы получаются с каталогами имена которых содержат пробелы. Я же в кавычки взял, как это преодолеть?
"И может собственных Платонов и быстрых разумом Невтонов российская земля рождать."
М. В. Ломоносов
М. В. Ломоносов
-
- Бывший модератор
- Сообщения: 1629
- Статус: мизантроп.ка
- ОС: Gentoo
Re: помогите написать скриптик на bash
but in the darkness, behind your smile, you scream... © Dio
-
- Сообщения: 556
- ОС: Gentoo/MacOSX/Windows Vista
Re: помогите написать скриптик на bash
вечером еще поразбирался с sed'om и наваял скриптик, переименовывающий файлы *.flv.mpg to *.mpg
#!/bin/bash
for a in `ls`
do
b=`echo $a | sed 's/flv.mpg/mpg/'`;
mv $a $b
done
#!/bin/bash
for a in `ls`
do
b=`echo $a | sed 's/flv.mpg/mpg/'`;
mv $a $b
done
Спасибо!
-
- Сообщения: 1073
- Статус: столлманист
- ОС: Debian GNU/Linux
Re: помогите написать скриптик на bash
Ну, делаю так же, а оно не работает.

Код: Выделить всё
#!/bin/bash
for f in `find ./downloads/ -type d`
do
echo "$f"
done
Выводит:
.
Код: Выделить всё
/downloads/pictures
./downloads/sources
./downloads/name
with
space
./downloads/name
with
space/NS
./downloads/name
with
space/computers
Но если в консоли написать, то работает:
Код: Выделить всё
[viacheslav@localhost test] $ echo "a s f kjkkklkl"
a s f kjkkklkl
[viacheslav@localhost test] $
Что-то них я не понимаю...
"И может собственных Платонов и быстрых разумом Невтонов российская земля рождать."
М. В. Ломоносов
М. В. Ломоносов
-
- Сообщения: 767
- ОС: Debian GNU/Linux SID
Re: помогите написать скриптик на bash
глянь в разделе программирования APE2FLAC
-
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: помогите написать скриптик на bash
for f in "`find ./downloads/ -type d`"
мне больше понравился вариант который тут когда-то показали:
find ./downloads/ -type d|while read i; do echo $i; done
мне больше понравился вариант который тут когда-то показали:
find ./downloads/ -type d|while read i; do echo $i; done
-
- Сообщения: 3339
- ОС: Slackware 12.2, ArchLinux 64
Re: помогите написать скриптик на bash
Может тебе "find..." в кавычки взять?
Вот смотри.
Директория work содержит директорию с именем "youly paly"
~$ for f in `find work/ -type d`; do echo "$f"; done
work/
work/2006
work/youly
paly
~$ for f in "`find work/ -type d`"; do echo "$f"; done
work/
work/2006
work/youly paly
Вот смотри.
Директория work содержит директорию с именем "youly paly"
~$ for f in `find work/ -type d`; do echo "$f"; done
work/
work/2006
work/youly
paly
~$ for f in "`find work/ -type d`"; do echo "$f"; done
work/
work/2006
work/youly paly
-
- Сообщения: 1073
- Статус: столлманист
- ОС: Debian GNU/Linux
Re: помогите написать скриптик на bash
О! Это помогло. Теперь новый прикол.
Код: Выделить всё
#mkdir "out"
for f in "`find ./downloads/ -type d`"
do
echo "./out/$f"
done
Код: Выделить всё
[viacheslav@localhost test] $ ./cpdirs
./out/./downloads/
./downloads/html
./downloads/html/Программирование сокетов в Linux_files
./downloads/html/Программирование сокетов в Linux_files/orphus_data
./downloads/html/RFC 913 (SFTP)_files
./downloads/html/docs.kde.org
Почему первая строка получилась нормальной, а остальные нет???

"И может собственных Платонов и быстрых разумом Невтонов российская земля рождать."
М. В. Ломоносов
М. В. Ломоносов
-
- Сообщения: 636
- ОС: Debian GNU/Linux
-
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: помогите написать скриптик на bash
вобщем-то да :-) я пока правда у себя ни одного такого не встречал, а такие файлы вообще можно сделать? :-)
-
- Бывший модератор
- Сообщения: 2521
- Статус: статус, статус, статус
Re: помогите написать скриптик на bash
-
- Сообщения: 246
Re: помогите написать скриптик на bash
Чтоб не создавать тему решил здесь спросить:
Так вот: постоянно срабатывает второе условие. Есть ли скайнет в процессах, нету ли: всё равно всегда срабатывает echo $ST1. Права на запуск есть. Что неправильно то?
Код: Выделить всё
#/bin/bash
ST1=`ps aux|grep -c xskynet`
ST2='2'
if [ -z "$ST1"="$ST2" ]
then /windows/D/openskynet-091/xskynet
else echo $ST1
fi
Так вот: постоянно срабатывает второе условие. Есть ли скайнет в процессах, нету ли: всё равно всегда срабатывает echo $ST1. Права на запуск есть. Что неправильно то?
-
- Сообщения: 3339
- ОС: Slackware 12.2, ArchLinux 64
Re: помогите написать скриптик на bash
man bash
Собственно, выполнение какого условия проверяется этим if'ом?
Код: Выделить всё
-z string
True if the length of string is zero.
Собственно, выполнение какого условия проверяется этим if'ом?
-
- Сообщения: 246
Re: помогите написать скриптик на bash
(Uncle_Theodore @ Mar 26 2007, в 23:10) писал(а):Собственно, выполнение какого условия проверяется этим if'ом?
Понял.. -z знач тут нефтему. Вобщем смысл скрипта - проверять висит ли в процессах xskynet, если не висит - запускать. А условие тут: проверять равны ли строки ST1,ST2 и соответственно если неравны, то запускать xskynet.
Может я как то через нето место это пытаюсь сделать, но просто не придумал как ещё. Вобщем как сделать красивее?
-
- Бывший модератор
- Сообщения: 2421
- Статус: Übermensch
- ОС: лялих
Re: помогите написать скриптик на bash
просто запускай его как и не надо никаких скриптов...
Код: Выделить всё
while :; do /windows/D/openskynet-091/xskynet; done
слава роботам!
-
- Сообщения: 28
- ОС: fedora core 6
Re: помогите написать скриптик на bash
pgrep xskynet - самое простое))
home: labtop asus z99h & desktop - fedora core 6
work: fedora core 6
work: fedora core 6
-
- Сообщения: 181
- ОС: GNU/Linux
Re: помогите написать скриптик на bash
Я тоже с просьбой.
Вообщем нужно сваять скрипт который будет делать след.:
Дано - корневая директория (допустим) /tmp/share (права 770, владелец-admin, группа-users). В этой директории есть другие директории, в которых права такие-же как и на share, владелец тоже admin, но группы уже во всех отличаются. Вообщем нужно написать скрипт, который бы в каждом каталоге менял права файлам и поддиректориям на родительские.
Например:
/tmp/share - drwxrwx--- admin users
|
--dir1 - drwxrwx--- admin group1
|
--dira - drwxrwx--- admin users
|
---dir2 - drwxrwx--- admin group2
Нужно директори dira находящейся в dir1 поменть группу как у dir1.
Вообщем пробовал так
Который делает все директории admin:users.
Вообщем нужно сваять скрипт который будет делать след.:
Дано - корневая директория (допустим) /tmp/share (права 770, владелец-admin, группа-users). В этой директории есть другие директории, в которых права такие-же как и на share, владелец тоже admin, но группы уже во всех отличаются. Вообщем нужно написать скрипт, который бы в каждом каталоге менял права файлам и поддиректориям на родительские.
Например:
/tmp/share - drwxrwx--- admin users
|
--dir1 - drwxrwx--- admin group1
|
--dira - drwxrwx--- admin users
|
---dir2 - drwxrwx--- admin group2
Нужно директори dira находящейся в dir1 поменть группу как у dir1.
Вообщем пробовал так
Код: Выделить всё
find /tmp/share -type d -exec chown -R admin:`ls -al |sed 1d |sed 2,\$d | awk '{print $4}'` {} \;
Который делает все директории admin:users.
-
- Сообщения: 181
- ОС: GNU/Linux
Re: помогите написать скриптик на bash
Проблему решил
Код: Выделить всё
#!/bin/sh
for i in `find /tmp/share/* -type d`
do
/bin/chown -R admin:`ls -al $i | sed -n 2p | awk '{print $4}' ` $i
done
-
- Сообщения: 304
- ОС: Сам не знаю
Re: помогите написать скриптик на bash
Написал тут запоминатель паролей, вот думаю как бы шифровать пароли в нём, а назад возвращать в нормальном виде если ввести главный пароль.
Сам скриптик залил сюда http://muzx.net/zpass.tar
Вообще в теории хотя бы как это сделать?
Сам скриптик залил сюда http://muzx.net/zpass.tar
Вообще в теории хотя бы как это сделать?
-
- Сообщения: 636
- ОС: Debian GNU/Linux
Re: помогите написать скриптик на bash
Хрюндель писал(а): ↑04.04.2007 20:51Написал тут запоминатель паролей, вот думаю как бы шифровать пароли в нём, а назад возвращать в нормальном виде если ввести главный пароль.
Сам скриптик залил сюда http://muzx.net/zpass.tar
Вообще в теории хотя бы как это сделать?
man openssl
-
- Сообщения: 304
- ОС: Сам не знаю
Re: помогите написать скриптик на bash
man openssl
Угу, немного разобрался. Щас вот думаю над теорией, как правильно сделать.
1. Складывать пароли в открытом виде в файл и шифровать этот файл симетричным методом.
2. Складывать шифрованые симетричным методом пароли в обычный файл.
Какой метод правильние?
(напомню что в итоге нужно по определённому passpharse получить в ответ пароли от записей в открытом виде)
-
- Сообщения: 636
- ОС: Debian GNU/Linux
Re: помогите написать скриптик на bash
Хрюндель писал(а): ↑05.04.2007 17:52
man openssl
Угу, немного разобрался. Щас вот думаю над теорией, как правильно сделать.
1. Складывать пароли в открытом виде в файл и шифровать этот файл симетричным методом.
2. Складывать шифрованые симетричным методом пароли в обычный файл.
Какой метод правильние?
(напомню что в итоге нужно по определённому passpharse получить в ответ пароли от записей в открытом виде)
я бы делал 1-м способом.
Только учитывай, что содержимое удалённого файла на диске остаётся, т.е. для удаления временных файлов надо использовать что то вроде shred.
Ну и можно много других параноидальных штук придумать, в общем если для себя делаешь, то нормально будет.