- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
#!/bin/bash
MYDIR="/home/"
DIRS=`ls -l $MYDIR | egrep '^d' | awk '{print $9}'`
for DIR in $DIRS
do
echo ${DIR}
chown -R $DIR:$DIR $MYDIR/$DIR
done
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−119
#!/bin/bash
MYDIR="/home/"
DIRS=`ls -l $MYDIR | egrep '^d' | awk '{print $9}'`
for DIR in $DIRS
do
echo ${DIR}
chown -R $DIR:$DIR $MYDIR/$DIR
done
Как одноразовый скрипт для решения подобной проблемы, написанный второпях за пару минут, имхо, не говно.
find /home/ -type d -maxdepth 1
да или даже:
for DIR in /home/*/
очевидно что писал не админ, а программист - потому что перенапрограммировал много лишнего.
на спех я бы делал нечто типа и по шагам:
1. find /home/ -type d -maxdepth 1 (или ls -1d /home/*/)
2. find /home/ -type d -maxdepth 1 | sed 's!^/home/!!'
3. find /home/ -type d -maxdepth 1 | sed 's!^/home/!!' | sed 's!.*!chown -R &:& /home/&!'
4. find /home/ -type d -maxdepth 1 | sed 's!^/home/!!' | sed 's!.*!chown -R &:& /home/&!' | sh -x
на 3ем шаге видны комманды которые выполнятся будут. 4й шаг финальный и не обратимый :)
ЗЫ да, я серьезно подсел на кодо-генерацию с последующим пайпингом в шелл.
Ну да, для отладки удобно, видно какие команды будут исполняться.
> {} и ;
Ну не знаю, уже как-то привык их юзать: Хотя да, если бы тут надо было что-то помимо тупой подстановки - уже не прокатит.
P.S. Уже не прокатило. Тут же полные пути передаются, а не имена директорий ;)
P.S. Кстати, maxdepth и mindepth надо писать до -type d, иначе кидает ворнинг, хотя и работает ;(
а я стал пользоваться, т.к. у меня встречались пробелы
можно было переопределить разделитель в баше на $'\n', но для меня было проще осилить -exec
Чот мне кажется что так работать не будет, во всяком случае не везде.
А вот первый вариант ближе к правде - у find'а есть -exec из которого можно дернуть chmod
:E
C-x d ~ RET t O <имя пользователя> RET
C-x d ~ M-BACKSPACE t C-u O -R <имя пользователя>
Чем же плохо? 12 нажатий клавиш, половина из которых нажимается одновременно, чем 23 нажатия клавиш в "chown -R user:user user"?
Т.е. одна эта команда поправит владельца всех юзеров? Или только одного, имя которого в ней указано? ;)
> половина из которых нажимается одновременно
Тем и плохо. Тексты я набираю довольно быстро (200-400 cpm). Да и запоминаются они легко. А эти комбы от емакса по сложности запоминания сходны с приемами из файтингов. Их можно только задрочить, юзая изо дня в день. Причем всяко, если их долго не юзать, они забудутся.
А если мне кинули C-x d ~ M-BACKSPACE t C-u O -R <имя пользователя>, то что я должен делать? Смотреть описание каждого хоткея? Так они же еще и многоуровневые... В емаксе можно куданить вбить комбу и сразу посмотреть ее описание?
P.P.S. Я ничего не имею против хоткеев, которые используются повседневно - копирование\вставка\сохранение\компиляци я и т.п. Я только против навешивания всего подряд на них.
Зависит от привычки / как кому удобнее. Т.как я бы скорее всего делал макросом, то сделал бы так, кому-то может было бы удобнее сделать это отдельной функцией / записью в регистры и т.п.
> то что я должен делать? Смотреть описание каждого хоткея?
Для человека, который пользуется Эмаксом в повседневной жизни эти хоткеи - как для других, наверное, Ctrl X / Ctrl V... Мне не нужно было бы смотреть их описания. Но если я не знаю описаний - всегда есть C-h k или C-h b. Просто человек, который пользуется Эмаксом, как правило, помнит в несколько десятков раз больше хоткеев, чем пользователи других текстовых редакторов (ну, кроме Vi(m)).
Это оправывается скоростью, так что никто не жалуется :) Это соотностистя как техника скорочтения и обычное чтение с работой с чем-нибудь типа Эклипса / МСВС.
А даже с точки зрения записи - она абсолютно однозначная, с минимумом избыточности (единственное, что приходит в голову, это S-x эквивалентно X.) Но эта избыточность очевидна человеку которых хоть раз пользовался клваиатурой :) Тут нету каких-то разночтений в том, в каком порядке нажимать клавиши, или какие именно клавиши имеются в виду.
Чтобы было понятнее сколько времени это занимает.
C-x d ~ M-BACKSPACE RET t ! chown *:* RET
так вот чем емаксные шорткаты объясняются!?!