Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС для молодых и начинающих системных администраторов.
Доброго времени суток всем!
Делаю на bash сценарий бекапа, который должен собирать файлы с виндовых машин и скидывать на облако.
Проблема такая: поскольку машины виндовые, иногда встречаются файлы с длиной имени больше 255 байт, на которые NIX очень обижается, а davfs и вовсе падает...
Вопрос: как бы мне отловить такие файлы и включить в exclude у rsync?
exclList=""
for exclSect in $(find путь_к_папке | egrep '/[^/]{130,}$' )
do
if ! [ "x$exclSect" -eq "$exclSect" ]
then
exclList+=" --exclude "$exclSect
fi
done
вполне ожидаемо дробит имена файлов в кашу, поскольку в них пробелы...
А умнее я никак не придумаю.
Это условие всегда вернёт истину. А чтобы пробел не считался разделителем, надо убрать его из $IFS.
find вообще выводит такие длинные пути полностью? Если нет, то идея заведомо неудачная.
for exclSect in $(find путь_к_папке | egrep '/[^/]{130,}$' )
Не надо так делать. Любой пробел или спецсимвол в имени файла не обработается корректно.
Самое простое, что приходит в голову, это что-то в таком духе:
SLEDopit, спасибо огромное!
Как-то не подумал я, что можно просто маской сделать фильтрацию по длине имени...
Маска, она даёт то преимущество, что с ней find вообще не нужен! Вписываем её в --exclude у rsync и говорим, что так и было!
Не эстетично, зато надёжно и практично! )