Как уже было сказано в предыдущем ответе, вы можете использовать небольшой DNS-сервер на своем raspi и делать это таким образом. Если вы не хотите, и если ваше разрешение имени настроено на поиск / etc / hosts в первую очередь, вы можете использовать подобный сценарий, чтобы определить, что делать
domain=mydomain.com # modify as needed
domain_INT_IP=192.168.1.10 #modify as needed
home_netw=192.168 # first two octets, modify as needed but probably not
NIC=eth0 # modify as needed
myIP=$(ifconfig ${NIC}|grep "inet addr"|cut -d: -f2|cut -d" " -f1)
my_netw=$(echo ${myIP}|cut -d. -f1-2)
if [ "${my_netw}" == ${home_netw} ]
then
echo ${domain_EXT_IP}" "${domain} >> /etc/hosts
else
grep "${domain}" /etc/hosts >/dev/null; r=${?}
if [ ${r} -eq 0 ]
then
sed -i -e "/${domain}/d" /etc/hosts
fi
fi
, он в основном вставляет локальный IP-адрес в / etc / hosts
, когда он обнаруживает, что IP-адрес вашего устройства находится внутри вашей домашней сети. И удаляет эту строку, когда вы находитесь вне дома, позволяя вам использовать любой DNS-сервер, настроенный в вашем файле /etc/resolv.conf
.
Вы можете использовать функции вычитания массива и расширения фигурных скобок zsh , например:
Настройка:
$ tree.
.
├── folderA
│ ├── file0
│ ├── file1
│ └── file2
├── folderB
│ ├── file2
│ ├── file3
│ └── file4
└── folderC
3 directories, 6 files
cd folderA
A=(*)
cd../folderB
B=(*)
cd..
Исполнение:
cp folderA/${^A:|B} folderB/${^B:|A} folderC
Результат:
$ tree folderC
folderC
├── file0
├── file1
├── file3
└── file4
0 directories, 4 files
Два этапа установки создают массивы (с именами A
и B
), которые содержат имена файлов в папках A и B соответственно.
Шаг выполнения запрашивает cp
скопировать расширение массива A
за вычетом массива B
, все с префиксом folderA
, а также соответствующее расширение массива B
за вычетом A
. массив (с префиксомfolderB
)в folderC
.
Хакерское решение с использованием diff
, sed
иxargs
:
Тестовая установка:
$ mkdir folderA folderB folderC
$ touch folderA/fi\ le1 folderA/file2 folderA/file3 folderB/file3 folderB/file4
$ diff -rq folderA folderB
Only in folderA: fi le1
Only in folderA: file2
Only in folderB: file4
Теперь мы используем sed
для фильтрации всех строк, начинающихся со строки Only in folderA:
, и меняем эту часть на folderA/
, чтобы сформировать относительное имя файла с кавычками('folderA/fi le1'
). Затем эта строка передается в xargs
и используется для копирования этого файла в folderC
.
$ diff -rq folderA folderB | sed -n "s/^Only in \(folderA\): \(.*\)/'\1\/\2'/p" | xargs cp -vt folderC
'folderA/fi le1' -> 'folderC/fi le1'
'folderA/file2' -> 'folderC/file2'
То же, что и выше дляfolderB
:
$ diff -rq folderA folderB | sed -n "s/^Only in \(folderB\): \(.*\)/'\1\/\2'/p" | xargs cp -vt folderC
'folderB/file4' -> 'folderC/file4'