1. bash / Говнокод #13598

    −119

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 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

    Запостил: gongled, 12 Августа 2013

    Комментарии (23) RSS

    • А нахрена?
      Ответить
      • Да поди права сбил на хомяки. Вот восстанавливает теперь.

        Как одноразовый скрипт для решения подобной проблемы, написанный второпях за пару минут, имхо, не говно.
        Ответить
        • говно, говно. второпях до 9ти не считают.

          find /home/ -type d -maxdepth 1

          да или даже:

          for DIR in /home/*/

          очевидно что писал не админ, а программист - потому что перенапрограммировал много лишнего.
          Ответить
          • Ну да, согласен, через find -exec походу самое простое и однострочное.
            Ответить
            • может профи админы. я лично второпях find -exec не пользуюсь, потому что еще ни разу с первой попытки субститут и терминатор ({} и ;) правильно не заквотил.

              на спех я бы делал нечто типа и по шагам:
              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й шаг финальный и не обратимый :)

              ЗЫ да, я серьезно подсел на кодо-генерацию с последующим пайпингом в шелл.
              Ответить
              • > пайпингом в шелл
                Ну да, для отладки удобно, видно какие команды будут исполняться.

                > {} и ;
                Ну не знаю, уже как-то привык их юзать:
                find /home/ -maxdepth 1 -type d -exec echo chown {}:{} {} \;
                Хотя да, если бы тут надо было что-то помимо тупой подстановки - уже не прокатит.

                P.S. Уже не прокатило. Тут же полные пути передаются, а не имена директорий ;)
                Ответить
              • Надо еще -mindepth 1 добавить, иначе саму папку /home находит и пытается зачовнить.

                P.S. Кстати, maxdepth и mindepth надо писать до -type d, иначе кидает ворнинг, хотя и работает ;(
                Ответить
              • >может профи админы. я лично второпях find -exec не пользуюсь
                а я стал пользоваться, т.к. у меня встречались пробелы
                можно было переопределить разделитель в баше на $'\n', но для меня было проще осилить -exec
                Ответить
          • >>> for DIR in /home/*/
            Чот мне кажется что так работать не будет, во всяком случае не везде.

            А вот первый вариант ближе к правде - у find'а есть -exec из которого можно дернуть chmod
            Ответить
            • в баше будет. там глоб догадывается что хотят только подкаталоги без файлов.
              Ответить
    • # useradd -d /home/superuser myaut

      :E
      Ответить
    • Сделать все то же самое в Эмаксе:
      C-x d ~ RET t O <имя пользователя> RET
      Ответить
      • Упс, погарячился немного:
        C-x d ~ M-BACKSPACE t C-u O -R <имя пользователя>
        Ответить
        • И так для каждого из сотни юзеров ручками? :) Плохой пример, имхо. Если юзеров мало - намного проще набрать в консоли chown -R user:user user, чем вбивать это фаталити.
          Ответить
          • Нет, это для всех.

            Чем же плохо? 12 нажатий клавиш, половина из которых нажимается одновременно, чем 23 нажатия клавиш в "chown -R user:user user"?
            Ответить
            • > Нет, это для всех.
              Т.е. одна эта команда поправит владельца всех юзеров? Или только одного, имя которого в ней указано? ;)

              > половина из которых нажимается одновременно
              Тем и плохо. Тексты я набираю довольно быстро (200-400 cpm). Да и запоминаются они легко. А эти комбы от емакса по сложности запоминания сходны с приемами из файтингов. Их можно только задрочить, юзая изо дня в день. Причем всяко, если их долго не юзать, они забудутся.
              Ответить
            • Причем текст легче разбирать. Если мне кинули chown -R user:user максимум, что нужно сделать - заглянуть в ман по chown.

              А если мне кинули C-x d ~ M-BACKSPACE t C-u O -R <имя пользователя>, то что я должен делать? Смотреть описание каждого хоткея? Так они же еще и многоуровневые... В емаксе можно куданить вбить комбу и сразу посмотреть ее описание?
              Ответить
            • P.S. И вот интересно - сами же когда-то охаивали использование операторов в языках типа сишки. Дескать операторы говно, and вместо & удобнее и т.п. И тут же сами пишете, что хоткеи удобнее команд. Что-то тут не так ;)

              P.P.S. Я ничего не имею против хоткеев, которые используются повседневно - копирование\вставка\сохранение\компиляци я и т.п. Я только против навешивания всего подряд на них.
              Ответить
              • Имя можно указать как угодно (с привязкой к директории).
                Зависит от привычки / как кому удобнее. Т.как я бы скорее всего делал макросом, то сделал бы так, кому-то может было бы удобнее сделать это отдельной функцией / записью в регистры и т.п.

                > то что я должен делать? Смотреть описание каждого хоткея?
                Для человека, который пользуется Эмаксом в повседневной жизни эти хоткеи - как для других, наверное, Ctrl X / Ctrl V... Мне не нужно было бы смотреть их описания. Но если я не знаю описаний - всегда есть C-h k или C-h b. Просто человек, который пользуется Эмаксом, как правило, помнит в несколько десятков раз больше хоткеев, чем пользователи других текстовых редакторов (ну, кроме Vi(m)).
                Это оправывается скоростью, так что никто не жалуется :) Это соотностистя как техника скорочтения и обычное чтение с работой с чем-нибудь типа Эклипса / МСВС.
                Ответить
              • Разница с операторами фундаментальная. Это запись не является самой программой. Программа находится в двигательной / моторной памяти человека. Так же, как пианист, например, помнит руками гаммы / гитарист аккорды и т.п.
                А даже с точки зрения записи - она абсолютно однозначная, с минимумом избыточности (единственное, что приходит в голову, это S-x эквивалентно X.) Но эта избыточность очевидна человеку которых хоть раз пользовался клваиатурой :) Тут нету каких-то разночтений в том, в каком порядке нажимать клавиши, или какие именно клавиши имеются в виду.
                Ответить
              • http://youtu.be/h1BOAnu23Zc
                Чтобы было понятнее сколько времени это занимает.
                Ответить
          • Или, еще такой вариант:

            C-x d ~ M-BACKSPACE RET t ! chown *:* RET
            Ответить
          • "чем вбивать это фаталити."

            так вот чем емаксные шорткаты объясняются!?!
            Ответить

    Добавить комментарий