Вы можете это сделать, и это совсем не сложно. Раньше я занимался программированием на нескольких небольших предприятиях, и у меня было несколько сайтов на моем домашнем сервере для демонстрации незавершенных работ. Я использовал (и до сих пор) dynDNS, для которого я плачу 25 долларов США в год. Как уже упоминалось, есть бесплатные услуги, но все они требуют определенных обручей, чтобы проскочить. Я лично считаю, что стоимость, которую я плачу, недостаточно, чтобы беспокоиться. Когда я зарегистрировался, у них были бесплатные услуги, но я не знаю, продолжают ли они это делать.
Способ DynDNS заключается в том, что вы можете зарегистрировать любое количество имен, которые вы выберете из их выбора. Например, у них есть одно имя homelinux.net; вы можете зарегистрировать такое имя, как «Bennypr0fane.homelinux.net», и оно будет перенаправлено на ваш текущий IP-адрес, который вы поддерживаете, периодически запуская клиента обновлений (у них есть помощь в том, как это сделать, и даже поставлять клиент для Ubuntu).
Затем у вас работает веб-сервер, например Apache, который имеет виртуальный сайт, работающий под этим именем. Вы можете использовать другие сайты под другими именами или другие серверы, работающие с другими портами. У меня есть электронная библиотека, доступная через сервер Caibre, а также веб-сайты. Вам нужно будет сообщить маршрутизатору о каждом порту, к которому необходимо получить доступ.
Если я правильно вас понимаю, вы хотите сравнить файлы в двух каталогах и скопировать файлы с другим содержимым в третий каталог. Я не вижу способа сделать это только с одной командой (если вы не написали свой собственный скрипт или функцию). Но одна из сильных сторон оболочки bash состоит в том, что вы можете связывать команды, используя вывод одной команды в качестве входа следующего.
Во-первых, вы можете использовать diff, как обычно:
diff -q dir1/ dir2/
Это даст вам выход по линиям
Files dir1/file2.txt and dir2/file2.txt differ
Files dir1/file3.txt and dir2/file3.txt differ
Теперь вам нужно извлечь пути к файлам из этого вывода. Для этого вы можете использовать несколько команд: cut, grep, sed, awk или другие. Я буду использовать awk в этом примере и извлечь файлы из dir2:
diff -q dir1 dir2 | awk -n '{ print $4 }'
Выход этого конвейера будет выглядеть как
dir2/file2.txt
dir2/file3.txt
. Этот вывод теперь можно подать на xargs следующим образом:
diff -q dir1 dir2 | awk -n '{ print $4 }' | xargs -d '\n' -I {} cp {} target-dir/
Обратите внимание, что этот метод работает только в том случае, если в обоих каталогах существуют разные файлы. Если есть файл, который существует только в одном из двух каталогов, выход diff s будет другим, что приведет к сбою выключения файла. Кроме того, имена файлов не должны содержать пробелов, потому что это также приведет к отключению резки.
Если я правильно вас понимаю, вы хотите сравнить файлы в двух каталогах и скопировать файлы с другим содержимым в третий каталог. Я не вижу способа сделать это только с одной командой (если вы не написали свой собственный скрипт или функцию). Но одна из сильных сторон оболочки bash состоит в том, что вы можете связывать команды, используя вывод одной команды в качестве входа следующего.
Во-первых, вы можете использовать diff, как обычно:
diff -q dir1/ dir2/
Это даст вам выход по линиям
Files dir1/file2.txt and dir2/file2.txt differ
Files dir1/file3.txt and dir2/file3.txt differ
Теперь вам нужно извлечь пути к файлам из этого вывода. Для этого вы можете использовать несколько команд: cut, grep, sed, awk или другие. Я буду использовать awk в этом примере и извлечь файлы из dir2:
diff -q dir1 dir2 | awk -n '{ print $4 }'
Выход этого конвейера будет выглядеть как
dir2/file2.txt
dir2/file3.txt
. Этот вывод теперь можно подать на xargs следующим образом:
diff -q dir1 dir2 | awk -n '{ print $4 }' | xargs -d '\n' -I {} cp {} target-dir/
Обратите внимание, что этот метод работает только в том случае, если в обоих каталогах существуют разные файлы. Если есть файл, который существует только в одном из двух каталогов, выход diff s будет другим, что приведет к сбою выключения файла. Кроме того, имена файлов не должны содержать пробелов, потому что это также приведет к отключению резки.
Если я правильно вас понимаю, вы хотите сравнить файлы в двух каталогах и скопировать файлы с другим содержимым в третий каталог. Я не вижу способа сделать это только с одной командой (если вы не написали свой собственный скрипт или функцию). Но одна из сильных сторон оболочки bash состоит в том, что вы можете связывать команды, используя вывод одной команды в качестве входа следующего.
Во-первых, вы можете использовать diff, как обычно:
diff -q dir1/ dir2/
Это даст вам выход по линиям
Files dir1/file2.txt and dir2/file2.txt differ
Files dir1/file3.txt and dir2/file3.txt differ
Теперь вам нужно извлечь пути к файлам из этого вывода. Для этого вы можете использовать несколько команд: cut, grep, sed, awk или другие. Я буду использовать awk в этом примере и извлечь файлы из dir2:
diff -q dir1 dir2 | awk -n '{ print $4 }'
Выход этого конвейера будет выглядеть как
dir2/file2.txt
dir2/file3.txt
. Этот вывод теперь можно подать на xargs следующим образом:
diff -q dir1 dir2 | awk -n '{ print $4 }' | xargs -d '\n' -I {} cp {} target-dir/
Обратите внимание, что этот метод работает только в том случае, если в обоих каталогах существуют разные файлы. Если есть файл, который существует только в одном из двух каталогов, выход diff s будет другим, что приведет к сбою выключения файла. Кроме того, имена файлов не должны содержать пробелов, потому что это также приведет к отключению резки.