[решено] Замена файлов по списку

Ответить
Аватара пользователя
Endy1

[решено] Замена файлов по списку

Сообщение Endy1 »

Есть множество файлов с именем "Root", каждый из которых содержит всего одну строчку. Нужно эту строчку поменять.

Командой find я нашёл все эти файлы с именем "Root". Их несколько сотен Изображение

Все пути сохранил в отдельном файлике.



Ребята подскажите пожалуйста скриптик, который бы обошёл этот список и заменил файл "Root" на тот что мне нужен. Т.е. я создам файл с нужным мне параметром, а всё, что нужно сделать это поместить его с заменой в нужные места из списка.

Или можно чтобы сам файл не менялся, а заменить только его содержание (мне кажется это сложнее).



Как пройтись по списку из файла нашёл





Код:

Код: Выделить всё

#!/bin/bash
file=/home/volod/Root/virt1
cat $file | while read line; do
    echo "$line"
done



Осталось придумать как заменять файл.
Аватара пользователя
[mzd]

Re: [решено] Замена файлов по списку

Сообщение [mzd] »

Скрипт меняет строку charset=windows-1251 на charset=UTF-8 в каждом файле текущей директории:



Код:

Код: Выделить всё

#bin/sh
dir=.
for i in $dir/*
	     do
		if [ -f $i ]		   
		   then
                       cp $i $i.ed 
                       sed 's/charset=windows-1251/charset=UTF-8/g' $i > $i.ed
		       mv $i.ed $i
		fi
	     done

Вам необходимо дополнить его своими параметрами.
Аватара пользователя
ruslandh

Re: [решено] Замена файлов по списку

Сообщение ruslandh »

sed -i тут не облегчит работу?
Аватара пользователя
Endy1

Re: [решено] Замена файлов по списку

Сообщение Endy1 »

Спасибо за ответ! Я попробовал немного иначе, вроде получилось. Ваш вариант тоже испытаю.





Код:

Код: Выделить всё

#
!/bin/bash
file=/home/volod/Root/virt3 #Файл со списком путей к нужному файлу
filename=uus
cat=/bin/cat
$cat $file | while read line; do
if [ -f $line ]; then
echo "Нужный текст" >  $line
echo -e  $line '\033[1m OK'  #ОК с украшательствами :)
tput sgr0   
sleep 1
else
echo "$line is not file"
sleep 1
fi
done
Аватара пользователя
Endy1

Re: [решено] Замена файлов по списку

Сообщение Endy1 »

Запустил свой скрипт и столкнулся с проблемой. Всё работало хорошо, до сих пор, пока в списке не наткнулся на пусть с пробелами.

Например /srv/virtual_2/example.domen.ru/html/lib/Hardus/Fail new/Root



Естественно из за пробела в пути, скрипт не понимает, что это файл и не делает в нём изменений.

Мне кажется самый простой способ в файле со списком путей экранировать все пробелы обратным слешем, но как это сделать не в ручную пока не знаю. Может кто-то подскажет?



Т.е. это /srv/virtual_2/example.domen.ru/html/lib/Hardus/Fail new/Root

Привести к виду /srv/virtual_2/example.domen.ru/html/lib/Hardus/Fail\ new/Root (с экранирующим слешем перед пробелом).



Наверняка это можно сделать в vi или ещё как-то.
Аватара пользователя
Endy1

Re: [решено] Замена файлов по списку

Сообщение Endy1 »

Появилась идея просто заключить каждую строчку текста в кавычки.

Кто-нибудь знает как это сделать? Любыми средствами, кроме вставки вручную Изображение

Пытаюсь искать как автоматизировать этот процесс в Vim, пока не получается.
Аватара пользователя
Endy1

Re: [решено] Замена файлов по списку

Сообщение Endy1 »

Цитата Kent:



sed 's/^/"/ ; s/$/"/'
[решено] Замена файлов по списку




Спасибо! Добавить кавычки получилось. Да только мой скрипт теперь эти пути не считает за файлы...

Какой-то замкнутый круг. Изображение



Похоже надо всё таки искать решение, чтобы добавить обратный слеш (экранирующий пробелы) в те месте списка, где они есть.
Аватара пользователя
Kent

Re: [решено] Замена файлов по списку

Сообщение Kent »

Просто надо значение переменной брать в кавычки -- "$file"
Ответить

Вернуться в «Программирование в *nix»