Страница 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
Короче, шклифасовски
, я конечно ламер
, но если исходить из того что пишут корифеи Брайан Керниган и Роб Пайк в "Программное окружение UNIX":
(без in!!!) ничем не отличается от
, пробелы в аргументах не обрабатываются особым образом (т.е. аргумент с пробелом не будет считаться как 2 аргумента), результатом является список аргументов совпадающий с исходными аргументами
Т.е. я бы сделал скриптец который в цикле одного из вышеописанных видов работает со входными аргументами, ну и в него бы уже и передал в качестве аргументов результаты выполнения find.
Ето раз.
А два - я видел что проги просмотра видео когда открываешь с виндового раздела фильмец имеющий в наименовании пробелы, то енти пробелы автоматом экранируются бэкслэшем "\".
P.S.
Вот. Самому пробовать лень и нет времени пока, так что это просто к сведению.
Добавлено: 02 ноя 2004, 16:10
Serj
ААА!!! Вот как в цикле можно экранировать бэкслеши в аргументе i (если конечно это надо):
i=`echo $i | sed 's/ /\\\ /'`
Добавлено: 02 ноя 2004, 16:14
Serj
Хотя может быть лучше сначала запустить мега скрипт, который заменяет пробелы в именах файлов ну например на "_".
Добавлено: 02 ноя 2004, 16:43
exe
find - правильный вариант и работает. Тока что проверил.
Добавлено: 02 ноя 2004, 18:26
Agronom
Serj писал(а):Хотя может быть лучше сначала запустить мега скрипт, который заменяет пробелы в именах файлов ну например на "_".
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
Ну я ж тебе написал как поменять пробел на забэкслэшенный пробел.
ну вот пример как поменять пробел на "_":
Только ещё раз напоминаю про то, что входные параметры должны восприниматься как есть, а не разбиваться по пробелам, тогда ты их просто не найдёшь. Для этого они должны обрабатываться в цикле вида как я уже писал. Или перед циклом можно заменить значение переменной внутреннего разделителя полей IFS (internal field separator) на символ новой строки, чтобы пробел не рассматривался как разделитель параметров, а в качестве такового рассматривался только символ новой строки (напр. результаты выполнения find'а и разделены символом новой строки), т.е.:
Добавлено: 03 ноя 2004, 12:42
Agronom
Vsem ogromnoe spasiba, razobralsia
Добавлено: 03 ноя 2004, 12:58
mend0za
IFS рулит, однозначно