мега скрипт

Форум предназначен для новичков. В нем предполагается рассматривать вопросы, которые встают на первых этапах освоения Linux
Аватара пользователя
Agronom
Интересующийся
Сообщения: 49
Зарегистрирован: 20 окт 2004, 13:48

мега скрипт

Сообщение Agronom »

короче мне нужно в одной папке убрать х у всех файлов, для этого я написал суппер мега скрипт:
#!/bin/bash
for FILE in `find . -type f`
do
chmod 644 $FILE
done

exit 0

это был он.. )
но появилась одна проблемма...
всё что содержится в этом разделе - есть бывший фат, т.к. он загнан на фтп... там море файлов в именах которых содержатся пробелы...
вот именно на них глюкает мой мега скрипт =))
как заставить его менять атрибуты на файлах с пробелами
и еще, как читать путь для комманды find из параметров с которыми запускается скрипт

спасиба

Foxx
Неотъемлемая часть форума
Сообщения: 435
Зарегистрирован: 03 апр 2004, 17:05
Контактная информация:

Сообщение Foxx »

параметры $1,$2 ... $n
$@ - вся строка параметров
штобы не было траблоф с пробелами придется видимо поиграть кавычками вокруг переменной FILE
а путь - pwd...
или я чето непонял?

Аватара пользователя
Agronom
Интересующийся
Сообщения: 49
Зарегистрирован: 20 окт 2004, 13:48

Сообщение Agronom »

tek teri u menia nema russkogo na klave tak sho terpite moi translit =)
a u menia drugaia misli, mojet zagoniati kajdoe vipolnenie kommandi find v peremennuiu a potom ee drugim vlojennim tsiklom probegati na nali4ie probelov i zameniati ih na : "\" dumaiu doljno pomo4, no ia ne znaiu kak eto sdelati =)
esi ia ne prov popravite... et moi pervii skript =) tak sho poproshu ne smeiatsia moim mojet glupim misliam... =)

Аватара пользователя
Andrej Ramaszeuski
Неотъемлемая часть форума
Сообщения: 507
Зарегистрирован: 28 ноя 2003, 11:42
Откуда: Pardubice, CZ
Контактная информация:

Re: мега скрипт

Сообщение Andrej Ramaszeuski »

Agronom писал(а):короче мне нужно в одной папке убрать х у всех файлов, для этого я написал суппер мега скрипт:
#!/bin/bash
for FILE in `find . -type f`
do
chmod 644 $FILE
done

exit 0

это был он.. )
но появилась одна проблемма...
всё что содержится в этом разделе - есть бывший фат, т.к. он загнан на фтп... там море файлов в именах которых содержатся пробелы...
вот именно на них глюкает мой мега скрипт =))
как заставить его менять атрибуты на файлах с пробелами
и еще, как читать путь для комманды find из параметров с которыми запускается скрипт

спасиба
ну а скрипт то зачем?

find -type f -exec chmod 644 {} \;
Linux is like a wigwam: no Windows, no Gates and Apache inside.

Аватара пользователя
Agronom
Интересующийся
Сообщения: 49
Зарегистрирован: 20 окт 2004, 13:48

Сообщение Agronom »

Andrej Ramaszeuski, vipolnenie etoi kommandi u menia vikidivaet eto: find: missing argument to `-exec'...

no 4eto mne kajetsia 4to i eta kommanda budet gliukati s imenami v kotorih esti probelli... ia poproboval poigrati s vlojennim tsiklom i vot 4e u menia polu4ilosi:

Код: Выделить всё

#!/bin/bash
for FILE in `find $1 -type f`
do
    for TEMP in FILE
    do
        if [ $TEMP -eq " " ]
        let $TEMP = "\"
        fi
    done
    chmod 644 $FILE
done
exit 0
vse eto delo vidalo oshibku :
./masschmod_bash_ls: line 7: unexpected EOF while looking for matching `"'
./masschmod_bash_ls: line 13: syntax error: unexpected end of file

de ia oshibsia???
i es4e esi kto znaet podskajite kakuiu-to dokuhu po bash-u(scripti) jelatelino na russkom[

Аватара пользователя
Serj
Неотъемлемая часть форума
Сообщения: 320
Зарегистрирован: 26 июн 2004, 13:48
Откуда: Беларусь, Минск

Сообщение Serj »

Короче, шклифасовски :), я конечно ламер 8), но если исходить из того что пишут корифеи Брайан Керниган и Роб Пайк в "Программное окружение UNIX":
(без in!!!) ничем не отличается от

Код: Выделить всё

for i in "$@"
, пробелы в аргументах не обрабатываются особым образом (т.е. аргумент с пробелом не будет считаться как 2 аргумента), результатом является список аргументов совпадающий с исходными аргументами
Т.е. я бы сделал скриптец который в цикле одного из вышеописанных видов работает со входными аргументами, ну и в него бы уже и передал в качестве аргументов результаты выполнения find.
Ето раз.
А два - я видел что проги просмотра видео когда открываешь с виндового раздела фильмец имеющий в наименовании пробелы, то енти пробелы автоматом экранируются бэкслэшем "\".

P.S.
Вот. Самому пробовать лень и нет времени пока, так что это просто к сведению.

Аватара пользователя
Serj
Неотъемлемая часть форума
Сообщения: 320
Зарегистрирован: 26 июн 2004, 13:48
Откуда: Беларусь, Минск

Сообщение Serj »

ААА!!! Вот как в цикле можно экранировать бэкслеши в аргументе i (если конечно это надо):

i=`echo $i | sed 's/ /\\\ /'`
Программист - это человек, который сначала долго думает, чтобы потом ничего не делать.

Аватара пользователя
Serj
Неотъемлемая часть форума
Сообщения: 320
Зарегистрирован: 26 июн 2004, 13:48
Откуда: Беларусь, Минск

Сообщение Serj »

Хотя может быть лучше сначала запустить мега скрипт, который заменяет пробелы в именах файлов ну например на "_". :lol:
Программист - это человек, который сначала долго думает, чтобы потом ничего не делать.

Аватара пользователя
exe
Неотъемлемая часть форума
Сообщения: 860
Зарегистрирован: 28 ноя 2003, 21:08
Откуда: Минск

Сообщение exe »

find - правильный вариант и работает. Тока что проверил.

Аватара пользователя
Agronom
Интересующийся
Сообщения: 49
Зарегистрирован: 20 окт 2004, 13:48

Сообщение Agronom »

Serj писал(а):Хотя может быть лучше сначала запустить мега скрипт, который заменяет пробелы в именах файлов ну например на "_". :lol:
tak nad 4em ia i biusi! kak v etom samom imeni naiti probel??

Аватара пользователя
exe
Неотъемлемая часть форума
Сообщения: 860
Зарегистрирован: 28 ноя 2003, 21:08
Откуда: Минск

Сообщение exe »

Agronom,

Да забыл чел путь поставить, неужели не глянешь в man ?

find . -type f -exec chmod a-x {} \;

Или не срабатывает у тебя эта команда?

Аватара пользователя
Andrej Ramaszeuski
Неотъемлемая часть форума
Сообщения: 507
Зарегистрирован: 28 ноя 2003, 11:42
Откуда: Pardubice, CZ
Контактная информация:

Сообщение Andrej Ramaszeuski »

exe писал(а):Agronom,

Да забыл чел путь поставить, неужели не глянешь в man ?

find . -type f -exec chmod a-x {} \;

Или не срабатывает у тебя эта команда?
Да, с путём я тормознул :)
Linux is like a wigwam: no Windows, no Gates and Apache inside.

Аватара пользователя
Serj
Неотъемлемая часть форума
Сообщения: 320
Зарегистрирован: 26 июн 2004, 13:48
Откуда: Беларусь, Минск

Сообщение Serj »

tak nad 4em ia i biusi! kak v etom samom imeni naiti probel
Ну я ж тебе написал как поменять пробел на забэкслэшенный пробел.
ну вот пример как поменять пробел на "_":

Код: Выделить всё

i=`echo $i | sed 's/ /_/'`
Только ещё раз напоминаю про то, что входные параметры должны восприниматься как есть, а не разбиваться по пробелам, тогда ты их просто не найдёшь. Для этого они должны обрабатываться в цикле вида как я уже писал. Или перед циклом можно заменить значение переменной внутреннего разделителя полей IFS (internal field separator) на символ новой строки, чтобы пробел не рассматривался как разделитель параметров, а в качестве такового рассматривался только символ новой строки (напр. результаты выполнения find'а и разделены символом новой строки), т.е.:

Аватара пользователя
Agronom
Интересующийся
Сообщения: 49
Зарегистрирован: 20 окт 2004, 13:48

Сообщение Agronom »

Vsem ogromnoe spasiba, razobralsia :D

Аватара пользователя
mend0za
Неотъемлемая часть форума
Сообщения: 2332
Зарегистрирован: 30 авг 2002, 12:33
Откуда: Minsk

Сообщение mend0za »

IFS рулит, однозначно
И увидел я зверя, выходящего из тундры. И число его было 3.14159265358979324...

Ответить