LINUX.ORG.RU

Братцы, выручайте! find & grep


0

0

Нужно перебрать все файлы в текущей директории и для каждого из них посмотреть, является ли он скриптом /bin/sh. Для таких файлов надобно установить атрибут chmod +x. И нужно это сделать одной командой... И использовать только find, grep, ну head, cat... без perl/awk & other. У меня не получается :((( Помогите, плииииз...


Про перебрать все файлы в директории:

find /<path>/dir_name - должно работать.

А какими признаками у тебя обладают скрипты bash, я, может быть увы:))), не знаю. Предлагаю додумать самому:)

Ikonta_521
()

а magic file(1) не помогает?

dilmah ★★★★★
()

Не, мне хочется смотреть внутрь каждого файла, и проверять _первую_ строку на "#!/bin/sh". Вот и все...

Я посмотрел ман по file, и все-таки не понял, как мне сделать все что я хочу, одной командой... И можно ли быть уверенным, что file есть в каждой линукс-системе?

JekLove
() автор топика

find /<path>/dir_name

head 1

grep "#!/bin/sh"

<То, что ты хочешь сделать с этим файлом, chmod +x например>

Некоторые из команд могут просить символ "-" в поле имя выходного файла для передачи информации дальше по конвееру. На сей предмет читай документацию.

Good Luck!

Ikonta_521
()

Символ конвеера вставишь сам. Пишу я пока, увы, из винды, символа конвеера в виндовой раскладке не нашел:(

Ситуация оригинальная: топология сети Token-Ring, протокол - IPX, выход в Сеть через Novell'овский proxy-server. Но настройка сети на моем рабочем месте - далеко не первоочередная задача. Так что до этого я пока не добрался :)

Ikonta_521
()

Это не то. То, что ты предложил, делает следующее: find порождает список файлов, этот список отправляется head-у, та одна строка, которую породит head, направляется grep-у, а то что осталось, дается chmod-у....

А нужно все это сделать для каждого файла. Я делал так:

find <my_dir> -exec \( head --lines=1 {} | grep '#! */bin/sh' \; \) -exec ...

Но символ конвейера отделяет find от всего остального! И ничего не работает :(((((( А как надо? Вот я ну никак не могу придумать....

Помогите! Пожалуйста.

JekLove
() автор топика

Все, спасибо всем. Я сам допер :) Надо так:

find <dir> -type f -print | xargs fgrep -l '#! */bin/sh' | xargs chmod +x

Yeaaaah :)

JekLove
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.