Иногда просто жизненно необходимо поправить много и быстро. Желательно одной строкой. Например, сменить права на файлы или папки, убрать или заменить повторяющийся текст в множестве файлов. Раздаем права на папки рекурсивно:
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).
Ну, вот как-то так.
Доброго, вот была тут у меня ситуация не приятная, ципанул какахи которые цепялись в JS скриптах… в конце файла добавлялась пара строк:
function g(){var r=new RegExp("(?:; )?1=([^;]*);?");return r.test(document.cookie)?true:false}var e=new Date();e.setTime(e.getTime() (2592000000));
< собственно консольными методами не очень получалось выковырять сие западло, ибо адекватно экранировать всю эту ересь не получилось... :( ... пришлось по одному выкашивать благо файлов около двух сотен, 15 минут ctrl+h в Gedit... На будущее, кто подскажет как подобные какахи можно поудобнее вычищать... ?if(!g()&&window.navigator.cookieEnabled){document.cookie="1=1;expires=" e.toGMTString() ";path=/";document.write('');}
Думаю, это вам поможет:
find ./ -type f -name "*.js" -exec sed -i s/OLDTEXT/NEWTEXT/g {} \;