Rsync удалить отсутствующие файлы

Обновлено: 21.11.2024

В этом посте я расскажу об основах rsync в рамках подготовки к следующему посту, посвященному резервному копированию и его использованию в сочетании с cronjobs для автоматизации процесса резервного копирования. От копирования и синхронизации локальных файлов и папок до использования для передачи информации между компьютерами. Его использование в качестве демона, когда SSH недоступен, было перемещено в отдельный раздел.

Основы rsync

rsync — очень универсальный инструмент для копирования и резервного копирования, включенный по умолчанию почти в каждый дистрибутив Linux. Его можно использовать как расширенный инструмент копирования, позволяющий нам копировать файлы как локально, так и удаленно. Его также можно использовать в качестве резервного инструмента. Он поддерживает создание добавочных резервных копий.

rsync использует известный алгоритм дельта-передачи, который позволяет нам передавать новые файлы, а также последние изменения в существующих файлах, игнорируя при этом неизмененные файлы. Кроме того, поведение rsync можно полностью настроить, что поможет нам автоматизировать резервное копирование. Его также можно запустить в качестве демона, чтобы превратить компьютер в хост и позволить клиентам rsync подключаться к нему.

Помимо копирования локальных файлов и папок, rsync позволяет нам копировать через SSH (Secure Shell), RSH (Remote Shell), и его можно запускать как демон на компьютере и разрешать другим компьютерам подключаться к нему, когда rsync запускается как демон, он прослушивает порт TCP 873.

Когда мы используем rsync в качестве демона или когда мы используем RSH, данные, отправляемые между компьютерами, передаются в незашифрованном виде, поэтому, если вы передаете файлы между двумя компьютерами в одной локальной сети, это полезно, но это не должно нельзя использовать для передачи файлов по незащищенным сетям, таким как Интернет. Для этой цели подойдет SSH.

Это основная причина, по которой я предпочитаю использовать SSH для передачи данных, кроме того, поскольку SSH безопасен, на многих серверах доступен демон SSH. А вот использование rsync в качестве демона для передачи по быстрым соединениям, как это обычно бывает в локальной сети, полезно. На моих компьютерах не запущен демон RSH, поэтому вы можете найти меня немного предвзятым в отношении SSH в примерах. В примерах, касающихся передачи файлов между двумя компьютерами, в качестве среды передачи используется SSH, но в отдельном посте я расскажу об использовании rsync в качестве демона.

Копирование локальных файлов и папок

Чтобы скопировать содержимое одной локальной папки в другую, заменив файлы в папке назначения, мы используем:

В исходной_папке обратите внимание, что я добавил косую черту в конце, это предотвратит создание новой папки, если мы не добавим косую черту, в папке назначения будет создана новая папка с именем исходной папки. . Таким образом, если вы хотите скопировать содержимое папки с именем «Изображения» в существующую папку, которая также называется «Изображения», но находится в другом месте, вам необходимо добавить косую черту в конце, в противном случае внутри папки «Изображения» создается папка с именем «Изображения». мы указываем в качестве пункта назначения.

rsync -rtv источник/назначение/

rsync -rtv источник назначения/

Параметр -r означает рекурсивность, то есть он будет копировать содержимое исходной папки, а также содержимое каждой папки внутри нее.

Параметр -t заставляет rsync сохранять время модификации файлов, копируемых из исходной папки.

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

Это параметры, которые я часто использую, так как я обычно создаю резервные копии личных файлов, и они не содержат таких вещей, как символические ссылки, но есть еще один очень полезный параметр для использования rsync с параметром -a.

rsync -av источник/назначение/

Параметр -a также делает копирование рекурсивным и сохраняет время модификации, но дополнительно копирует символические ссылки, которые он встречает, как символические ссылки, сохраняет разрешения, сохраняет информацию о владельце и группе, а также сохраняет устройства и специальные файлы. Это полезно, если вы копируете всю домашнюю папку пользователя или системные папки куда-то еще.

Работа с пробелами и редкими символами

Мы можем экранировать пробелы и редкие символы так же, как и в bash, используя \ перед любым пробелом и редким символом. Кроме того, мы можем использовать одинарные кавычки для заключения строки:

Обновить содержимое папки

Чтобы сэкономить трафик и время, мы можем не копировать файлы, которые уже есть в папке назначения, но не были изменены в исходной папке. Для этого мы можем добавить параметр -u в rsync, это будет синхронизировать папку назначения с исходной папкой, здесь вступает в действие алгоритм дельта-передачи. Для синхронизации двух таких папок мы используем:

По умолчанию rsync принимает во внимание дату модификации файла и размер файла, чтобы решить, нужно ли перенести файл или его часть или можно оставить файл в покое, но вместо этого мы можем используйте хэш, чтобы решить, отличается ли файл или нет. Для этого нам нужно использовать параметр -c, который будет выполнять контрольную сумму в передаваемых файлах. Это позволит пропустить любой файл, в котором контрольная сумма совпадает.

Синхронизация двух папок с помощью rsync

Чтобы синхронизировать две папки, нам нужно не только добавить новые файлы из исходной папки в папку назначения, как в предыдущих темах, но и удалить файлы, удаленные из исходной папки, из папку назначения. rsync позволяет нам сделать это с помощью параметра --delete , который используется в сочетании с ранее объясненным параметром -u, который обновляет измененные файлы, позволяя нам поддерживать синхронность двух каталогов при сохранении пропускной способности.

Процесс удаления может происходить в разные моменты переноса путем добавления некоторых дополнительных параметров:

  • rsync может искать отсутствующие файлы и удалять их перед выполнением процесса передачи, это поведение по умолчанию, и его можно установить с помощью --delete-before
  • rsync может искать отсутствующие файлы после завершения передачи с помощью параметра --delete-after
  • rsync может удалять файлы, сделанные во время передачи, когда обнаруживается, что файл отсутствует, он удаляется в этот момент, мы включаем это поведение с помощью --delete-during
  • rsync может выполнять передачу и находить отсутствующие файлы во время этого процесса, но вместо того, чтобы удалять файлы во время этого процесса, он ждет, пока он завершится, и впоследствии удаляет найденные файлы. Это можно сделать с помощью --delete-delay

Сжатие файлов при передаче

Для экономии полосы пропускания, а обычно это также может сэкономить некоторое время, мы можем сжимать передаваемую информацию, для этого нам нужно добавить параметр -z в rsync.

Обратите внимание, однако, что если мы передаем большое количество небольших файлов по быстрому соединению, rsync может работать медленнее с параметром -z, чем без него, так как сжатие каждого файла перед передачей займет больше времени, чем просто перенос файлов. Используйте этот параметр, если у вас есть соединение с ограниченной скоростью между двумя компьютерами или если вам нужно сэкономить трафик.

Перенос файлов между двумя удаленными системами

rsync может копировать файлы и синхронизировать локальную папку с удаленной папкой в ​​системе, на которой работает демон SSH, демон RSH или демон rsync. В приведенных здесь примерах для передачи файлов используется SSH, но применяются те же принципы, если вы хотите сделать это с помощью rsync в качестве демона на главном компьютере, прочтите ниже Запуск rsync в качестве демона, когда ssh недоступен для получения дополнительной информации об этом.

Для передачи файлов между локальным компьютером и удаленным компьютером нам нужно указать адрес удаленной системы, это может быть доменное имя, IP-адрес или имя сервера, которое мы уже сохранили в наш конфигурационный файл SSH (информацию о том, как это сделать, можно найти в разделе «Определение серверов SSH»), за которым следует двоеточие и папка, которую мы хотим использовать для передачи. Обратите внимание, что rsync не может передавать файлы между двумя удаленными системами, только локальная папка или удаленная папка могут использоваться вместе с локальной папкой. Для этого мы используем:

От локальной папки к удаленной папке с использованием домена, IP-адреса и сервера, определенных в файле конфигурации SSH:
rsync -rtvz исходная_папка/пользователь@домен:/путь/к/целевой_папке/
rsync -rtvz исходная_папка/user@xxx.xxx.xxx.xxx:/путь/к/целевой_папке/
rsync -rtvz исходная_папка/ имя_сервера:/путь/к/целевой_папке/

Удаленная папка в локальную папку с использованием домена, IP-адреса и сервера, определенных в файле конфигурации SSH:
rsync -rtvz user@domain:/path/to/исходная_папка/целевая_папка/
rsync -rtvz user@xxx.xxx.xxx.xxx:/путь/к/исходной_папке/целевой_папке/
rsync -rtvz имя_сервера:/путь/к/исходной_папке/целевой_папке/

Исключение файлов и каталогов

Есть много случаев, когда нам нужно исключить определенные файлы и каталоги из rsync. Обычно это когда мы синхронизируем локальный проект с удаленным репозиторием или даже с работающим сайтом, в этом случае мы можем захотеть исключить некоторые каталоги разработки и некоторые скрытые файлы от переноса на работающий сайт.Исключение файлов можно выполнить с помощью --exclude, за которым следует каталог или файл, который мы хотим исключить. Исходная папка или папка назначения может быть локальной или удаленной папкой, как описано в предыдущем разделе.

rsync -rtv --exclude 'каталог' исходная_папка/целевая_папка/
rsync -rtv --exclude 'file.txt' исходная_папка/целевая_папка/
rsync -rtv --exclude 'путь/к/ каталог' исходная_папка/целевая_папка/
rsync -rtv --exclude 'путь/к/файлу.txt' исходная_папка/целевая_папка/

Пути относятся к папке, из которой мы вызываем rsync, если только она не начинается с косой черты, в этом случае путь будет абсолютным.

Еще один способ сделать это — создать файл со списком файлов и каталогов, которые нужно исключить из rsync, а также с шаблонами (все файлы, соответствующие шаблону, будут исключены, *.txt исключит любой файл с это расширение), по одному в строке, и вызовите этот файл с параметром --exclude-from, за которым следует файл, который мы хотим использовать для исключения файлов. Сначала мы создаем и редактируем этот файл в нашем любимом текстовом редакторе, в этом примере я использую gedit, но вы можете использовать kate, Vim, nano или любой другой текстовый редактор:

В этот файл мы можем добавить следующее:

Затем мы вызываем rsync:

rsync -rvz --exclude-from 'excluded.txt' исходная_папка/целевая_папка/

В дополнение к удалению файлов, которые были удалены из исходной папки, как описано в Синхронизация двух папок с помощью rsync, rsync может удалять файлы, исключенные из передачи, мы делаем это с параметром --delete-excluded , например :

Эта команда сделает rsync рекурсивным, сохранит время модификации из исходной папки, повысит уровень детализации, исключит все файлы, соответствующие шаблонам в файле exclude.txt, и удалит все эти файлы, соответствующие шаблону, если они существуют в папку назначения.

Запуск rsync в качестве демона, когда ssh недоступен

Это было перемещено в отдельный раздел, Запуск rsync в качестве демона.

Некоторые дополнительные параметры rsync

-t Сохраняет время модификации передаваемых файлов.
-q Подавить любое сообщение, не являющееся ошибкой, это противоположно -v, который увеличивает многословие.
-d Перенести каталог без рекурсии, то есть переносятся только те файлы, которые находятся в папке.
-l Скопировать символические ссылки как символические ссылки.
-L Копировать файл, на который указывает символическая ссылка, всякий раз, когда он находит символическую ссылку.
-W Копировать файлы целиком. Когда мы используем алгоритм дельта-переноса, мы копируем только ту часть архива, которая была обновлена, иногда это нежелательно.
--progress Показывает ход передачи файлов.
-h Показывает информацию, которую предоставляет нам rsync, в удобочитаемом формате, суммы указаны в K, M, G и т. д.

Сноски

Количество опций, которые предоставляет нам rsync, огромно, мы можем точно определить, какие файлы мы хотим передать, какие конкретные файлы мы хотим сжать, какие файлы мы хотим удалить в папке назначения, если эти файлы существуют, и мы также может иметь дело с системными файлами, для получения дополнительной информации мы можем использовать man rsync и man rsyncd.conf

Я оставляю информацию о резервном копировании вне этой публикации, так как она будет освещена вместе с автоматизацией резервного копирования в следующем сообщении.

Возможно запустить rsync в Windows с помощью cygwin, однако в данный момент у меня нет доступной Windows-системы (и я не планирую приобретать ее в обозримом будущем), поэтому даже подумал, что сделал я не могу писать об этом. Если вы запускаете rsync как службу в Windows, вам нужно добавить строку « strict mode = false » в rsyncd.conf в области модулей, это предотвратит проверку разрешений в файле секретов и, следовательно, сбой, потому что они неправильно настроены (поскольку они не работают так же, как в Linux).

Этот пост может быть обновлен, если есть что подправить или добавить еще немного информации, если я сочту это необходимым.

Я вижу на справочной странице rsync, что есть несколько вариантов удаления, но на самом деле не понимаю различий между ними. В чем разница между этими вариантами?

Он больше не указан по умолчанию на странице руководства для протокола rsync версии 3.1.2 версии 31. Однако я предполагаю, что версия с текстом в кавычках заключается в том, что если вы используете только --delete, а не --delete-WHEN , то это как если бы вы указали --delete-WHEN , где WHEN по умолчанию имеет значение before .

См. также соответствующий вопрос о том, как удалить исходные файлы после передачи: rsync удалить файлы на отправляющей стороне после передачи? . и посмотрите этот не менее ценный вопрос о том, как удалять каталоги: Использование опции --remove-source-files rsync

4 ответа 4

--del/--delete_during : удаляет файлы из целевого каталога по мере их копирования (экономия памяти по сравнению с --delete-before : --delete-before выполняет отдельное сканирование для поиска удаляемых файлов)

--delete: удаляет файлы в целевом каталоге, если они не существуют в исходном каталоге.

--delete-before : удалить файлы в целевом каталоге перед копированием файла с тем же именем из исходного каталога

--delete-during : Удалить файлы в целевом каталоге ПРИ копировании файла с тем же именем из исходного каталога

--delete-delay : Отметить удаление во время передачи, но дождаться завершения передачи

--delete-after : Получатель удаляет после передачи, а не до. Если какая-то другая часть rsync переместила лишние файлы в другое место, вы бы хотели это вместо --delete-delay , потому что --delete-delay решает, что он собирается удалить в середине передачи, тогда как --delete-after проверяет каталог для файлов, которые должны быть удалены ПОСЛЕ того, как все будет завершено.

--delete-excluded : удаляет файлы из целевого каталога, которые явно исключены из передачи из исходного каталога.

Смысл rsync не в копировании, а в архивировании. Это важное различие. Обработка удаленных/измененных файлов очень важна и во многих случаях связана с нюансами.

В частности, флаг --delete я много раз видел неверным. Многие люди используют rsync для перемещения файлов в хранилище с низким приоритетом, и в этом случае вы хотите, чтобы файлы, в которые вы перемещаете, все еще СУЩЕСТВОВАЛИ в целевом каталоге. Это не то, что делает удаление: --delete гарантирует, что, когда вы удаляете файл из исходного каталога, он ТАКЖЕ удаляется из вашего целевого каталога, поэтому ваш пункт назначения не забивается мусором. Однажды видел, как парень уничтожил свою резервную копию, вставив новый диск и не отключив свой ночной скрипт rsync. Скрипт увидел, что исходный каталог теперь пуст, и удалил все файлы в целевом каталоге, чтобы они совпадали.

Большинство других параметров связаны с объемом или производительностью. Когда вы удаляете файлы, это важно, если вы хотите убедиться, что передача прошла успешно, прежде чем что-либо делать, но если ваше устройство слишком маленькое, чтобы обрабатывать 2 копии всей информации, вам нужно удалять по ходу дела и т. д. Это немного странный из-за его долгой истории на разных платформах: некоторые параметры были добавлены, чтобы люди, привыкшие к определенному поведению, не путались.

@ppr: зависит от системы. Причина, по которой у него так много специальных опций, заключается в том, что удалить в Solaris != удалить в HP-UX != удалить в AIX != удалить в Linux.

При rsyncing всего каталога удаляется ли после удаления каждый файл в промежутке между синхронизацией или только после зеркального отображения всего каталога? Я думал, что удаления после достаточно для моих нужд, но у меня не осталось места на устройстве при резервном копировании одного из моих дисков.

@Sridhar-Sarnobat: Либо. Он перемещает все, что собирается перемещать, и когда это делается, он начинает удалять вещи. Если вы хотите удалить его до того, как все будет перемещено, используйте --delete-during

После некоторого опыта я обнаружил, что даже функция удаления во время не всегда предотвращает отсутствие свободного места на устройстве (в Linux). Таким образом, удалить перед удалением — это единственный гарантированный способ избежать этого (например, при зеркальном отображении диска, который почти заполнен, и целевой диск тоже почти заполнен).

По умолчанию rsync не удаляет файлы на стороне назначения. Чтобы rsync вообще удалял файлы, вам нужно использовать хотя бы один из вариантов удаления.

Если вам все равно, когда файлы удаляются, просто используйте --delete и оставьте выбор rsync . Вы можете комбинировать --delete с другими параметрами удаления (это не конфликтует), но это не обязательно, так как все другие параметры удаления уже подразумевают --delete .

--delete-before работает следующим образом: rsync смотрит, какие файлы присутствуют в источнике, а какие в месте назначения, удаляет все файлы, найденные в месте назначения, но не в источнике, а затем запускает фактическую синхронизацию. Этот порядок удобен, если место назначения имеет мало места для хранения, так как сначала освобождается больше места на диске места назначения, прежде чем начинать передачу любых новых файлов. Недостатком является то, что rsync потребует больше памяти для выполнения операции, и вся операция представляет собой двухэтапный процесс и, следовательно, медленнее.

--delete-during работает следующим образом: rsync сразу же начинает синхронизировать файлы и когда натыкается на файл, существующий только в месте назначения, он удаляется. Таким образом, нет потери скорости, а также не требуется дополнительная память. Недостатком является то, что может случиться так, что сначала в места назначения будет скопировано много новых файлов, прежде чем удаленные файлы будут удалены, поэтому место назначения может потребовать гораздо больше дискового пространства во время операции, чем требуется в конце после завершения всей операции. сделано.

--delete-after работает следующим образом: сначала синхронизируйте все файлы, затем выполните ту же операцию, которую --delete-before выполняет перед фазой синхронизации. Это наихудший выбор в большинстве распространенных случаев, так как он требует больше всего памяти, больше всего места на диске в месте назначения и медленнее, так как это двухэтапный процесс; в основном он сочетает в себе все недостатки двух других методов. Этот параметр в основном существует для случая, когда вы используете «файлы слияния» (что такое файлы слияния и как они работают, выходит за рамки этого ответа). Поскольку эти файлы могут содержать правила для файлов, которые должны быть исключены при удалении, новые файлы слияния должны быть скопированы до этапа удаления, если их содержимое будет учитываться на этапе удаления. Если это не является обязательным требованием, --delete-after не имеет преимущества.

--delete-delay — это относительно новая опция (она недоступна в rsync 2.6.9, которая по-прежнему используется по умолчанию, например, в macOS 10.15). Он работает так же, как --delete-during , за исключением того, что он удаляет файлы не сразу, а после завершения синхронизации, поэтому он представляет собой гибрид --delete-during и --delete-after . Преимущества в том, что он быстрее, чем --delete-after, и по-прежнему правильно поддерживает слияние файлов, а недостаток в том, что он требует больше памяти и дискового пространства во время синхронизации, как и --delete-after .

--delete-excluded указывает rsync не только удалять файлы, отсутствующие в источнике, но также удалять файлы в месте назначения, которые были исключены из синхронизации ( --exclude или --exclude-from ), независимо от того, являются ли эти файлы действительно существовал бы в источнике или нет.

flickr / Шеннон Кринген

Возможно, вы хотите, чтобы каталоги, которые вы синхронизируете, были точными копиями друг друга, а может быть, вы просто этого не делаете. Давайте углубимся в команду rsync и посмотрим, не сможем ли мы найти правильное сочетание параметров для того, что вы хотите сделать.

Основное копирование

Команда rsync может реплицировать наборы файлов из одного места в другое во всех возможных подробностях или позволяет вам точно контролировать процесс репликации — что реплицируется, а что нет.

В своей простейшей форме команда rsync копирует файлы из источника файла в место назначения. Он не удалит файлы на стороне назначения, которых нет в источнике, и не будет воссоздавать все метаданные (например, информацию о владении и группе), если только ваша команда rsync не включает только правильный набор параметров. Итак, давайте проследим за серией команд rsync, чтобы увидеть, что они делают и не делают в ответ на наши запросы синхронизации.

Во-первых, если вы укажете имя каталога в качестве источника, rsync создаст (или обновит) каталог с этим именем в исходном местоположении, как вы можете видеть из этого примера. Здесь мы работаем с двумя папками в одной системе. Когда мы начинаем, оба каталога - orig и copy - существуют, но имеют только некоторые общие файлы.

Когда мы запускаем команду rsync с параметром -v (подробно), мы видим, что команда копирует все файлы из одного каталога в другой.

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

Синхронизация

В следующем примере мы работаем между двумя системами и реплицируем каталог с именем «архив». Первая операция копирует все, создавая каталог архива в удаленной системе. Мы используем просто ~unidweeb в качестве места назначения в удаленной системе (дом пользователя с именем «unixdweeb»).

Когда нечего делать

В следующий раз, когда мы запустим команду rsync, копировать будет нечего. Ничего не изменилось в каталоге архива, поэтому ничего не изменилось и в оригинале. Тем не менее мы видим, что некоторые байты перемещаются туда и обратно, потому что процессам rsync все еще нужно сравнивать записи и определять, нужно ли перемещать какие-либо файлы или содержимое файлов.

Работа с новым контентом

Когда в удаленном архиве появляется новый файл, мы должны настроить нашу команду rsync, если мы хотим, чтобы два наших архивных каталога оставались точно такими же. Наша следующая операция rsync показывает, что именно это и происходит. Добавляя параметр --delete, мы указываем rsync удалять любые файлы в целевой системе, которых нет в исходной системе.

Обратите внимание на сообщение «удаление архива/нового файла», которое появляется в нашем подробном выводе.Если вы хотите, чтобы ваша операция rsync использовала локальную систему в качестве источника содержимого и чтобы удаленная копия выглядела точно так же, как исходная, используйте параметр --delete.

Далее мы видим статистику переданных байтов и очень скромное ускорение.

И, как и следовало ожидать, новый файл, который каким-то образом попал в архивный каталог удаленной системы, теперь исчез.

Кроме того, если бы мы исследовали файлы в обеих системах, права собственности и разрешения были бы одинаковыми, поскольку мы используем параметр -a (архив), который гарантирует, что это так.

Реплицировать или нет

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

Опция --existing указывает rsync обновлять только те файлы, которые уже существуют в удаленной системе, а не создавать новые файлы. Обратите внимание, что в приведенном ниже примере файл newfile2 не реплицирован.

Мы также можем указать rsync не трогать более новые файлы на стороне назначения. Чтобы продемонстрировать, как это работает, мы сначала создадим новый файл с именем «newfile» на целевом сервере.

Затем в локальной системе мы снова запускаем rsync и замечаем, что новый файл на целевом сервере не перезаписывается файлом с тем же именем в исходной системе.

Чтобы гарантировать, что мы не создадим новые файлы и не перезапишем более новые файлы на стороне назначения, мы можем объединить эти два параметра. Обратите внимание, что в показанном ниже выводе не было внесено никаких изменений.

Исключение контента

Мы также можем исключить части каталога, которые вы не хотите копировать из одной системы (или местоположения файловой системы) в другую, используя параметр --exclude. Пример --exclude показан в приведенной ниже команде.

Приложив немного больше усилий, мы можем исключить несколько каталогов. Приведенная ниже команда исключает как ненужный каталог, так и тот, который называется «заметки». Пути указаны относительно текущего каталога.

Поскольку мы добавили /* после каждого из исключаемых каталогов, реплицируются сами каталоги, но не их содержимое.

Если сомневаетесь, проверьте

Всякий раз, когда вы пытаетесь получить правильный синтаксис в сложной команде rsync, помните, что вы можете попробовать команду, фактически не внося никаких изменений, используя параметр --dry-run вместе с -v ( подробный). Это покажет вам, что будет делать rsync, если вы запустите команду по-настоящему, но на самом деле ничего не реплицирует.

Присоединяйтесь к сообществам Network World на Facebook и LinkedIn, чтобы комментировать самые важные темы.

Сандра Генри-Стокер занимается администрированием систем Unix более 30 лет. Она описывает себя как «USL» (Unix как второй язык), но помнит достаточно английского, чтобы писать книги и покупать продукты. Она живет в горах в Вирджинии, где, когда не работает с Unix и не пишет о ней, отгоняет медведей от своих кормушек для птиц.

Независимо от того, отменили ли вы синхронизацию или что-то еще вызвало ее остановку или сбой, вы можете оказаться в ситуации, когда ваши целевые каталоги пронизаны временными файлами rsync.

Хотя вы можете полагаться на собственные параметры rsync --delete-during или --delete-after, могут возникнуть ситуации, когда целевой каталог содержит дополнительные файлы, которые вы не хотите удалять. Если вы хотите попробовать это, чтобы увидеть, подходит ли оно для вашего конкретного варианта использования, вы можете попробовать это вместе с флагом --dry-run, чтобы увидеть, как могут выглядеть результаты.

Для случаев, когда вы не можете полагаться на вышеизложенное, у меня есть короткая команда find, которая помогает найти только эти временные файлы. Поскольку я не слишком хорошо знаком с регулярными выражениями, особенно в контексте команд командной строки, я решил использовать формат glob, чтобы упростить его.

Чтобы запустить команду find без фактического удаления каких-либо файлов, вы можете выполнить следующую команду:

Это находит и перечисляет ( -ls ) все файлы, соответствующие указанному формату. По сути, это любой файл, имя которого начинается с точки, содержит не менее трех точек в имени и должно заканчиваться на .XXXXXX , где любой из этих X должен быть буквой.

Убедившись, что нежелательные файлы не отображаются в результатах, которые вы видели, вы можете запустить ту же команду, но на этот раз с установленным флагом -delete:

Вот оно! Теперь при необходимости вы можете повторно запустить rsync.

Надеюсь, это поможет.

Подпишитесь, чтобы узнать больше.

Asus Zenbook Duo 14 и Fedora Linux

Большую часть времени я провожу за рабочим столом, где у меня есть настольный компьютер с большим дисплеем. Это отличная установка, которая помогает мне быть продуктивным. Последние несколько месяцев я думал о том, чтобы найти ноутбук, который будет дополнять мою основную установку, чтобы я мог

Управляйте docker без использования sudo на Synology NAS

Если вы уже устанавливали и использовали docker, вы, вероятно, знакомы с добавлением учетной записи пользователя вашего компьютера в группу пользователей docker, чтобы вы могли управлять docker (и docker-compose) без использования sudo. Для производственных установок может быть полезно поддерживать этот уровень безопасности, но для

Автоматическое планирование переиндексации фотографий на Synology NAS для добавления отсутствующих изображений

Если у вас возникли проблемы с более стабильным отображением недавно добавленных изображений и видео в Synology Photos, это может быть вам полезно.

Читайте также: