Сценарий Bash для добавления динамического пути к существующему файлу .ini, возможно, с использованием sed? - PullRequest
2 голосов
/ 30 апреля 2010

У меня есть файл с общим именем .sqlite, содержащийся во многих домашних папках уникального пользователя со структурой файла: /home/user/unique-ip-address/folder/file.sqlite. Я решил переместить все эти файлы .sqlite. к монтированию tmpfs и уже сделали это, поддерживая полную структуру каталогов, поэтому каждый файл .sqlite теперь находится в: /mnt/tmpfs/home/user/unique-ip-address/folder/file.sqlite

Я ищу способ отредактировать INI-файл с общим именем в каждой домашней папке каждого пользователя с помощью уникального пути к файлу (например: /home/user/unique-ip-address/folder/file.ini), т.е. Использование команды find и sed должно помочь, но я не уверен, как, так как результаты поиска должны соответствовать пользователю в правильной папке в / mnt / tmpfs. Я хотел бы добавить новое местоположение .sqlite, используемое в / dev / shm, к file.ini в их домашних папках после dir = в file.ini. Спасибо!

1 Ответ

1 голос
/ 30 апреля 2010

Я считаю, что что-то вроде этого должно сработать: <pre> find /home/*/unique-ip-address/folder/file.ini | xargs -n1 perl -pe 'BEGIN{$infile="/mnt/tmpfs/$ARGV[0]"} {s/dir=/$&$infile/}'

Эта команда ничего не меняет, она просто печатает все. Если похоже, что он делает то, что вы хотите, просто добавьте -i.bak в самый конец, и он внесет изменения на месте. Исходный файл будет переименован в file.ini.bak.

<pre> find /home/*/unique-ip-address/folder/file.ini | xargs -n1 perl -pe 'BEGIN{$infile="/mnt/tmpfs/$ARGV[0]"} {s/dir=/$&$infile/} -i.bak'

...