Попытка скопировать архив из одного сетевого ресурса в другой, игнорируя символ тильды

6

Я пытался скопировать том архива с одного сетевого ресурса на другой. Поскольку большинство из этих файлов - файлы Mac, я использую Mac Terminal для этого. Я перепробовал каждую комбинацию cp, rsync, and ditto, которую мог придумать.

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

Например: «28910 BP Umba Show.SIT» считается идентичным «28910B ~ 1.SIT» и поэтому не будет копироваться в новое местоположение архива.

Любая помощь с благодарностью, заранее спасибо.

user1539563
источник
Этот пример имени файла, похоже, содержит несколько неотображаемых символов, что и вызывает проблему. Какими структурами томов являются сетевые ресурсы и какие протоколы используются? Это установка для всех компьютеров Mac, или вы переходите с или на Windows или другую ОС? Я бы посоветовал вам взглянуть на приложение A Better Finder Rename , в котором есть несколько очень мощных функций, в том числе массирование имен файлов в соответствии с соглашениями об именах в разных ОС. Возможно, ABFN может помочь. Отказ от ответственности: я счастливый пользователь ABFN - без финансовых связей.
IconDaemon
1
Окончание ~ 1 заставляет меня думать, что файлы находятся или были в WinXP / DOS-совместимой файловой системе. Вы проверили файлы на самом деле не идентичны? В именах Win 8.3 должны быть реальные хранилища полных имен где-то в метафайле, но я так долго с этим не справляюсь, не могу вспомнить, где: /
Tetsujin
Файлы не идентичны, они различаются по размеру и имеют разные файлы внутри. Выходные данные .sit получены из инструмента управления архивами под названием «Stuffit». Кажется, это какой-то инструмент сжатия. Сетевые папки - это Windows, и они представляются в Mac через Acronis Connect. Я использую afp, хотя smb также включен. Я посмотрю на ABFN. Благодарю.
user1539563
2
Stuffit долгое время был форматом сжатия «go to» на Mac, пока zip не вступил во владение OS X. По сути, в имени файла нет ничего противозаконного, 28910B~1.SITи Mac не должен считать его таким же, как 28910 BP [anything]. Возможно, мешает удаленная файловая система / ОС? Я бы попытался перетащить хотя бы тестовую папку, используя Finder, на свой Mac, а затем вернуться на новый сервер, чтобы посмотреть, что произойдет.
Tetsujin

Ответы:

3

Имя файла 28910B~1.SITвыглядит как сокращенное имя файла MS-DOS, которое содержит более 8,3 символов (длинные имена файлов).

Важно отметить, что в Windows 2000 и длинное имя, и сокращенное имя 8.3 были сохранены (файл имел оба имени)

... когда приложение сохраняет файл на компьютере под управлением Windows 2000, имя файла 8.3 и полное имя файла сохраняются.

Например, 28910 BP Umba Show.SITавтоматически сокращаются до 28910B~1.SITи дубликатов увеличиваются ( 28910B~2.SIT, 28910B~3.SIT, 28910B~4.SITи т.д.) Вы можете прочитать больше об этом именовании на Microsoft Tech Network

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

Из комментария:

В любом случае, мне нужна магия, которая скопирует архив и проигнорирует тильду.

Он не может игнорировать тильду - он есть, и с этим нужно разобраться; Что касается macOS, два файла имеют одинаковые имена (потому что они есть).

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

for file in /source/directory; do $time=date +%s; if [[ -f /target/directory/$file ]]; then cp $file ${file}-${time}; else cp $file /target/directory/$file; fi; done

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

Аллан
источник
Это какая-то структура файлов управления архивами. Я не думаю, что это дос, но файлы очень старые (около 2004 года). Это файлы Mac, которые сохраняются в общий ресурс Windows. В любом случае, мне нужна магия, которая скопирует архив и проигнорирует тильду. Спасибо
user1539563
1
Я обновил ответ - это файлы Mac, которые сохраняются в общий ресурс Windows. Это суть вопроса прямо здесь. Неважно, на какой платформе он был создан, он был сохранен на машине Windows, что означало, что он создал имя файла 8.3 для обеспечения совместимости; Примерно в 2004 году наступил тот период времени, когда я описал статью, на которую я ссылался.
Аллан