Меняем файлы пачками

Иногда просто жизненно необходимо поправить много и быстро. Желательно одной строкой. Например, сменить права на файлы или папки, убрать или заменить повторяющийся текст в множестве файлов. Раздаем права на папки рекурсивно:

find . -type d -exec chmod 755 {} \+

Что оно делает: ишет папки (find c типом d) и выполняет с каждым найденным chmod 755

Если нужно поменять права на файлы — меняем тип и права:

find . -type f -exec chmod 644 {} \+

Здесь, соответственно, f — это файлы.

Вообще, если нужно поменять права только в текущей директории — можно сделать так:

chmod 777 *

А вот  если мы напишем

chmod -R 777 *

это нам поменяет права рекурсивно, но без разбора — файлы это или папки — все под одну гребенку.

Например, Joomla. У нее много папок и иногда приходится менять ручками если заливали через ftp или распаковали из архива.

Смена прав на каталоги для  Joomla 2.5.x (необходимо для нормальной работы)

cd /path/to/www/
chmod 777 administrator/components administrator/language administrator/language/cs-CZ administrator/language/da-DK administrator/language/de-DE administrator/language/el-GR administrator/language/en-GB administrator/language/es-ES administrator/language/fa-IR administrator/language/fr-FR administrator/language/hu-HU administrator/language/it-IT administrator/language/nb-NO administrator/language/nl-NL administrator/language/overrides administrator/language/pl-PL administrator/language/pt-BR administrator/language/pt-PT administrator/language/ru-RU administrator/language/sv-SE administrator/language/th-TH administrator/language/tr-TR administrator/language/zh-CN administrator/language/zh-TW administrator/manifests/files administrator/manifests/libraries administrator/manifests/packages administrator/modules administrator/templates components images images/banners images/sampledata images/stories language language/cs-CZ language/da-DK language/de-DE language/el-GR language/en-GB language/es-ES language/fa-IR language/fr-FR language/hu-HU language/it-IT language/nb-NO language/nl-NL language/overrides language/pl-PL language/pt-BR language/ru-RU language/sk-SK language/sv-SE language/th-TH language/tr-TR language/zh-CN language/zh-TW libraries media modules plugins plugins/authentication plugins/captcha plugins/content plugins/editors plugins/editors-xtd plugins/extension plugins/finder plugins/quickicon plugins/search plugins/system plugins/user plugins/vmcalculation plugins/vmcustom plugins/vmpayment plugins/vmshipment templates cache administrator/cache logs tmp

Смена прав на каталоги для  Joomla 1.5.x (необходимо для нормальной работы)

cd /path/to/www/
chmod 777 administrator/backups/ administrator/components/ administrator/language/ administrator/language/en-GB/ administrator/language/ru-RU/ administrator/modules/ administrator/templates/ components/ images/ images/banners/ images/stories/ language/ language/en-GB/ language/pdf_fonts/ language/ru-RU/ media/ modules/ plugins/ plugins/content/ plugins/editors/ plugins/editors-xtd/ plugins/search/ plugins/system/ plugins/user/ plugins/xmlrpc/ templates/ cache/ administrator/cache/ logs/ tmp/

Это установит права на запись всем каталогам, для которых это необходимо в Joomla 1.5.

Бывают случаи, когда на сайте поковырялись злоумышленники и распихали во все, до чего дотянулись, редирект с поисковиков на левую страницу. То есть при прямом заходе или переходе по ссылке откуда-то, сайт открывается, а при переходе с поисковика — редиректится например на порнуху какую-нибудь. Досадно, учитывая то, что поисковик забанит такой сайт не задумываясь. По крайней мере, сайт очень низко свалится.

find /pat/to/public_html -name "*.*" -exec sed -i 's/ЧТО_ЗАМЕНЯЕМ/НА_ЧТО ЗАМЕНЯЕМ/g' {} \+

Если пишет

sed: -e expression #1, char 20: unterminated `s' command

нужно заменить апостроф перед s и после g

Что это все значит. Ну, понятно, что find ищет все файлы и выполняет команду. В нашем случае это sed. Sed — это очень крутой и навороченный инструмент для работы с текстом в Linux. Точнее, с текстом в файлах. Тут написано: текст ЧТО_ЗАМЕНЯЕМ надо заменить на текст НА_ЧТО_ЗАМЕНЯЕМ все включения (g) в файле (который только что нашел find).

Ну, вот как-то так.

0

Меняем файлы пачками: 2 комментария

  1. Serjik

    Доброго, вот была тут у меня ситуация не приятная, ципанул какахи которые цепялись в JS скриптах… в конце файла добавлялась пара строк:
    function g(){var r=new RegExp("(?:; )?1=([^;]*);?");return r.test(document.cookie)?true:false}var e=new Date();e.setTime(e.getTime() (2592000000));
    if(!g()&&window.navigator.cookieEnabled){document.cookie="1=1;expires=" e.toGMTString() ";path=/";document.write('');}
    < собственно консольными методами не очень получалось выковырять сие западло, ибо адекватно экранировать всю эту ересь не получилось... :( ... пришлось по одному выкашивать благо файлов около двух сотен, 15 минут ctrl+h в Gedit... На будущее, кто подскажет как подобные какахи можно поудобнее вычищать... ?

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