Скопировать различия между двумя директориями в новый каталог?

Вы можете это сделать, и это совсем не сложно. Раньше я занимался программированием на нескольких небольших предприятиях, и у меня было несколько сайтов на моем домашнем сервере для демонстрации незавершенных работ. Я использовал (и до сих пор) dynDNS, для которого я плачу 25 долларов США в год. Как уже упоминалось, есть бесплатные услуги, но все они требуют определенных обручей, чтобы проскочить. Я лично считаю, что стоимость, которую я плачу, недостаточно, чтобы беспокоиться. Когда я зарегистрировался, у них были бесплатные услуги, но я не знаю, продолжают ли они это делать.

Способ DynDNS заключается в том, что вы можете зарегистрировать любое количество имен, которые вы выберете из их выбора. Например, у них есть одно имя homelinux.net; вы можете зарегистрировать такое имя, как «Bennypr0fane.homelinux.net», и оно будет перенаправлено на ваш текущий IP-адрес, который вы поддерживаете, периодически запуская клиента обновлений (у них есть помощь в том, как это сделать, и даже поставлять клиент для Ubuntu).

Затем у вас работает веб-сервер, например Apache, который имеет виртуальный сайт, работающий под этим именем. Вы можете использовать другие сайты под другими именами или другие серверы, работающие с другими портами. У меня есть электронная библиотека, доступная через сервер Caibre, а также веб-сайты. Вам нужно будет сообщить маршрутизатору о каждом порту, к которому необходимо получить доступ.

0
задан 19 January 2018 в 16:23

3 ответа

Если я правильно вас понимаю, вы хотите сравнить файлы в двух каталогах и скопировать файлы с другим содержимым в третий каталог. Я не вижу способа сделать это только с одной командой (если вы не написали свой собственный скрипт или функцию). Но одна из сильных сторон оболочки 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 будет другим, что приведет к сбою выключения файла. Кроме того, имена файлов не должны содержать пробелов, потому что это также приведет к отключению резки.

1
ответ дан 22 May 2018 в 15:26
  • 1
    Блестяще благодарю вас, в конце концов, я достиг такого же ответа! (С помощью). Клавиатура почти нетронутая !! – SimplySimplified 22 January 2018 в 15:28

Если я правильно вас понимаю, вы хотите сравнить файлы в двух каталогах и скопировать файлы с другим содержимым в третий каталог. Я не вижу способа сделать это только с одной командой (если вы не написали свой собственный скрипт или функцию). Но одна из сильных сторон оболочки 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 будет другим, что приведет к сбою выключения файла. Кроме того, имена файлов не должны содержать пробелов, потому что это также приведет к отключению резки.

1
ответ дан 17 July 2018 в 22:40

Если я правильно вас понимаю, вы хотите сравнить файлы в двух каталогах и скопировать файлы с другим содержимым в третий каталог. Я не вижу способа сделать это только с одной командой (если вы не написали свой собственный скрипт или функцию). Но одна из сильных сторон оболочки 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 будет другим, что приведет к сбою выключения файла. Кроме того, имена файлов не должны содержать пробелов, потому что это также приведет к отключению резки.

1
ответ дан 24 July 2018 в 13:16

Другие вопросы по тегам:

Похожие вопросы: