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

запуск linux: xinput не применяет настройки в скрипте
Mac OS X сохраняет" старую " переменную окружения
Переименование с помощью exiftool: как бороться с отсутствующими тегами?
Запустить скрипт BASH в Cygwin
ограничить rsync (или сценарий bash) каталогом
Как проверить подключение к локальной сети с помощью терминала mac os?
Как использовать "progress-bar.sh" для отображения хода выполнения операций, выполняемых на удаленных серверах
Отключить подсказки автозаполнения на iTerm2
Скрипт Bash выполняется, но команда' until ' не найдена
Скрипт Homebrew для переустановки формул
Как я могу заставить команду scp перезаписать папку назначения
Windows 10 Bash команда не работает, несмотря на включение режима разработчика и включение " Подсистема Windows для Linux"
Скрипт для CRON (FTP получать файлы каждую минуту)
Не удается установить subversion поверх yum
Имена файлов Munpack и utf-8 в прикреплениях

Как копировать файлы с помощью ditto с обратными косыми чертами в именах файлов

Im написание сценария для копирования файлов с символами, не поддерживаемыми Office365, в папку кэша на OSX перед удалением символов (эта часть опущена). Это работает, за исключением файлов, таких как:

pophaddy.jpg

где ditto интерпретирует обратную косую черту как пробел и терпит неудачу. Пытаюсь найти наиболее эффективный способ сделать это.

find $HOME  -not ( -path "$HOME/Library" -prune ) -not ( -path "$HOME/Cache" -prune ) -not ( -path "$HOME/.Trash" -prune )  -name "*[<>:/|?#%\]*" -exec bash -c 'x="{}" && echo $x && ditto "$x" $HOME/Cache/ ; y=$(sed "s/[<>:|?#%\]+/-/g" <<< "$x")   ' ;
5
задан rndy
источник

1 ответов

Я использую Ubuntu, поэтому у меня нет ditto, но следующее должно работать:

find $HOME  -not \( -path "$HOME/Library" -prune \) \
            -not \( -path "$HOME/Cache" -prune \) \
            -not \( -path "$HOME/.Trash" -prune \) \
            -name "*[<>:/|?#%\\]*" | while read -r; \
  do cp --parent --preserve-all "${REPLY}" "$HOME/Cache/${REPLY/[<>:|?#%\]/-}"; \
  done

Примечание:

  • я распределил команду по нескольким строкам для удобочитаемости.
  • это не совсем то, что вы пытались достичь: выше заменяет каждый отдельный недопустимый символ на -, при попытке заменить каждую последовательность недопустимых символов на один -, хотя оба дают совместимые с Office файлы.
  • в общем, Я предпочитаю трубопроводы read, а не -exec bash /c ..., который нуждается в большой осторожности по использованию цитирования и побега.
0
отвечен AFH 2016-10-14 18:13:34
источник

Другие вопросы bash find macos regex sed