Если Вы знаете в какой-то момент вовремя, что файл хорош, можно сделать контрольную сумму из него и использовать его для сравнения позже, чтобы удостовериться, что это все еще цело. Это полезно прежде, чем передать файлы между носителем или через сети.
Если Вы не знаете о хорошем состоянии файла, нет нет никакого универсального пути или проверяющий на повреждение. Только определенный формат файла в каждом случае определяет то, что повреждено или не поврежденные данные.
find some/dir \
-exec grep -q "replace me" {} \; \
-exec cp some/new/filename.php {} \;
Решение Ignacio с find
вероятно, лучший способ. Здесь это со всеми подробностями из включенных комментариев. Я специфически только ищу файлы (не каталоги) затем собирающий в группу трех операторов в группе с или операторов для соответствия любому из имен:
find /dir/ \
-type f \
\( -name timthumb.php -or -name thumb.php -or -name rt-timthumb.php \) \
-exec grep -q "timthumb" {} \; \
-exec cp filename.php {} \;
Однако Вы могли также сделать открытие только с шаблонами шарика оболочки также, чем-то вроде этого:
shopt -s extglob
for file in /dir/**{timthumb,thumb,rt-timthumb}.php; do
grep -q 'timthumb' "$file" && cp filename.php "$file"
done
Вы могли также использовать grep, чтобы сделать рекурсивный поиск вместо globbing. Это было бы полезно, если бы у Вас было много файлов:
grep -l -R -Z 'timthumb' /dir/**thumb.php | while read -d $'\0' file; do
cp filename.php "$file"
done
Во всей замене случаев "/dir /" с основным путем Вы хотите воздействовать на и "filename.php" с исходным файлом, с которым Вы собираетесь перезаписать. Кавычка по мере необходимости. Обратите внимание, что в последнем примере я использовал ярлык для соответствия всем файлам, кто соответствие имен "*thumb.php". Вы могли сделать это в других примерах также. В случае находки Вы могли отбросить полный набор ИЛИ операторы в parens и просто использовать -name '*thumb.php'
. Все вышеупомянутые примеры будут только воздействовать на filesthat, соответствуют тем шаблонам имени И содержат строку 'timthumb'.
-l
опция к grep для вывода просто соответствия имени файла. Извините я пропустил тот ввод его.
– Caleb
20.08.2011, 09:58
echo
передcp
. – Ignacio Vazquez-Abrams 20.08.2011, 09:59find
может быть похожим на черную магию, но в основном это - просто серия последовательных тестов или действий, которые только выполняются, если предыдущие возвращают true. Вы могли изменить второе-exec
до он закрывается\;
оператор, чтобы быть просто-print
показать, что было подобрано предыдущими операторами. Вы могли также добавить "эхо" перед CP для распечатывания предварительного просмотра команд, которые будут выполнены. – Caleb 20.08.2011, 10:01find(1)
страница справочника детализирует их всех. – Ignacio Vazquez-Abrams 20.08.2011, 10:28