Страница 1 из 2

мега скрипт

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

exit 0

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

спасиба

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

Добавлено: 01 ноя 2004, 21:52
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... =)

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

Добавлено: 01 ноя 2004, 23:23
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 {} \;

Добавлено: 02 ноя 2004, 15:12
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[

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

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

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

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

Добавлено: 02 ноя 2004, 16:10
Serj
ААА!!! Вот как в цикле можно экранировать бэкслеши в аргументе i (если конечно это надо):

i=`echo $i | sed 's/ /\\\ /'`

Добавлено: 02 ноя 2004, 16:14
Serj
Хотя может быть лучше сначала запустить мега скрипт, который заменяет пробелы в именах файлов ну например на "_". :lol:

Добавлено: 02 ноя 2004, 16:43
exe
find - правильный вариант и работает. Тока что проверил.

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

Добавлено: 02 ноя 2004, 20:07
exe
Agronom,

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

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

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

Добавлено: 03 ноя 2004, 00:35
Andrej Ramaszeuski
exe писал(а):Agronom,

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

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

Или не срабатывает у тебя эта команда?
Да, с путём я тормознул :)

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

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

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

Добавлено: 03 ноя 2004, 12:42
Agronom
Vsem ogromnoe spasiba, razobralsia :D

Добавлено: 03 ноя 2004, 12:58
mend0za
IFS рулит, однозначно