Ошибка «non existent or non regular file»: что это значит и как исправить

Ошибка «non existent or non regular file» появляется в терминале при работе утилит tar, scp, rsync или при создании архивов — и означает, что программа не может прочитать указанный путь как обычный файл: либо его вообще нет, либо это каталог, символьная ссылка, сокет или устройство. Первое действие — выполнить команду ls -la для проблемного пути и посмотреть, что реально находится по этому адресу.

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

Что означает сообщение «non existent or non regular file»

Фраза состоит из двух частей. «Non existent» — объект по указанному пути отсутствует: файл удалён, переименован, либо путь содержит ошибку. «Non regular file» — объект существует, но не является обычным файлом: это может быть директория, symlink, именованный канал (FIFO), сокет или файл устройства из /dev.

Утилиты вроде scp и tar по умолчанию работают только с регулярными файлами. Когда они встречают что-то другое, то сообщают об этом именно такой формулировкой. Понимание типа объекта — ключ к решению: команда file имя_файла или stat имя_файла покажет, с чем вы имеете дело.

Диагностика: как проверить путь и тип файла

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

ls -la /путь/к/файлу

stat /путь/к/файлу

file /путь/к/файлу

Обратите внимание на первый символ в выводе ls -la: - означает обычный файл, d — каталог, l — символьная ссылка, s — сокет, p — именованный канал. Если вместо ожидаемого файла вы видите l и стрелку, указывающую в никуда (красная подсветка в терминале), — перед вами «битая» ссылка, и это частая причина ошибки.

  • 🔍 Проверьте путь на опечатки и регистр символов — Linux различает File.txt и file.txt
  • 📁 Убедитесь, что вы не передаёте каталог туда, где ожидается файл
  • 🔗 Проверьте, не является ли объект символьной ссылкой на несуществующую цель
  • 💾 Убедитесь, что диск или сетевой ресурс с файлом смонтирован и доступен
📊 Где вы столкнулись с ошибкой «non existent or non regular file»?
При копировании через scp/sftp
При создании или распаковке tar-архива
При синхронизации через rsync
В другом случае

Ошибка при копировании через scp и sftp

Наиболее частый сценарий — попытка скопировать каталог командой scp без рекурсивного флага. Утилита видит, что источник — не регулярный файл, и сообщает об ошибке. Решение — добавить флаг -r:

scp -r /локальный/каталог user@host:/удалённый/путь

Вторая типичная причина — пробелы и спецсимволы в именах. Если путь содержит пробелы, возьмите его в кавычки или экранируйте символы, иначе scp воспримет часть имени как отдельный аргумент и не найдёт файл. Также проверьте, что удалённый путь указан относительно домашней директории пользователя либо как абсолютный — относительные пути часто трактуются не так, как ожидается.

⚠️ Внимание: при использовании подстановочных символов (*) в scp шаблон раскрывается удалённой стороной. Если на удалённом сервере нет совпадений, вы получите именно ошибку о несуществующем файле — проверьте шаблон командой ls на той стороне.

Ошибка при работе с tar-архивами

При создании архива tar может выдать предупреждение о несуществующих файлах, если часть объектов была удалена или переименована в момент архивирования — например, временные файлы активного приложения. Архив при этом обычно создаётся, но без пропущенных объектов. Если важна целостность, остановите приложение, пишущее в архивируемый каталог, или исключите временные файлы через --exclude.

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

tar -tvf archive.tar | less

☑️ Проверка перед архивированием или копированием

Выполнено: 0 / 5

Ошибка в rsync и права доступа

В rsync сообщение о нерегулярных файлах появляется, когда в синхронизируемом дереве встречаются сокеты, устройства или FIFO — например, при копировании системных каталогов вроде /run или /dev. Это нормально: такие объекты нельзя и не нужно копировать как файлы. Исключите их или добавьте флаг, соответствующий вашей задаче, сверившись с документацией man rsync.

Отдельный случай — права доступа. Если у пользователя нет прав на чтение файла или на вход в родительский каталог (отсутствует бит выполнения x на каталоге), утилита может сообщать об объекте как о недоступном или несуществующем. Проверьте права командой ls -la на сам файл и на всю цепочку родительских каталогов, при необходимости запустите операцию через sudo — но только если понимаете, зачем это нужно.

Сводная таблица причин и решений

СитуацияВероятная причинаДействие
scp каталогаКаталог без флага -rДобавить -r
Файл «есть», но ошибкаБитая символьная ссылкаПроверить ls -la, исправить ссылку
tar пропускает файлыФайлы изменяются во время архивированияОстановить приложение или исключить файлы
rsync системных каталоговСокеты и устройства нельзя копироватьИсключить /dev, /run
Файл с пробелами в имениПуть разбивается на аргументыЗаключить путь в кавычки

Профилактика: как не сталкиваться с ошибкой

Большинство случаев предотвращается дисциплиной в работе с путями. Используйте автодополнение клавишей Tab — оно гарантирует, что путь существует и набран без опечаток. Перед массовыми операциями копирования сначала выполните «сухой прогон»: у rsync для этого есть флаг --dry-run, который покажет список действий без их выполнения.

⚠️ Внимание: если ошибка возникает при работе с файлами на сетевой шаре (NFS, SMB), причиной может быть отвалившееся монтирование — каталог-точка монтирования существует, но пуст или содержит устаревшие данные. Проверьте вывод команды mount или df -h.
Почему symlink считается «нерегулярным» файлом

Символьная ссылка — это отдельный тип объекта файловой системы, содержащий лишь текст пути к цели. Утилиты вроде scp по умолчанию не переходят по ссылкам, а пытаются обработать сам объект ссылки. Если цель недоступна, возникает ошибка. Поведение можно изменить флагами (например, rsync имеет опции -l и -L для копирования ссылок или их целей) — уточните нужный флаг в man-странице вашей утилиты.

Если после всех проверок файл на месте, имеет тип «regular file», права в порядке, а ошибка повторяется — посмотрите полное сообщение об ошибке целиком: рядом часто указан конкретный путь или код, который сузит поиск. Полезно также проверить файловую систему на ошибки и свободное место на диске командой df -h.

Часто задаваемые вопросы

Что значит «non regular file» простыми словами?

Это любой объект файловой системы, который не является обычным файлом с данными: каталог, символьная ссылка, сокет, именованный канал или файл устройства. Утилита сообщает, что не может обработать его как файл.

scp пишет «not a regular file» — что делать?

Скорее всего, вы копируете каталог. Добавьте флаг -r для рекурсивного копирования. Если копируете один файл — проверьте, не является ли он символьной ссылкой.

Файл точно существует, но ошибка остаётся. Почему?

Проверьте регистр символов в имени, права доступа на файл и родительские каталоги, а также не отмонтировался ли диск или сетевая шара, на которой лежит файл.

Опасно ли игнорировать это предупреждение в tar?

Зависит от контекста. Если пропущены временные файлы — обычно некритично. Если пропущены нужные данные, архив будет неполным. Всегда просматривайте список пропущенных объектов и, при необходимости, повторяйте архивирование.

Как скопировать символьные ссылки через rsync?

Используйте флаг -l, чтобы сохранить ссылки как ссылки, или -L, чтобы скопировать файлы, на которые они указывают. Точное поведение описано в man rsync.