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

Я добавил новый путь в список путей, но не смог выполнить программу из любого места linux
Как я могу получить путь монтирования USB-устройства на OSX?
Запустить скрипт после входа в систему в Linux
Как объединить строку, содержимое файла и строку в сценарии bash?
Как использовать source в скрипте bash, чтобы изменить приглашение терминала?
В чем разница между set, env, declare и export при установке переменной в оболочке Linux?
Изменение атрибутов всех целевых символических ссылок в каталоге
/usr/bin / env: php: нет такого файла или каталога
SSH удаленная команда нет чтения всех переменных среды
Bash-хранение значения ключа в переменных, объявленных в ассоциативном массиве
Как использовать терминал для входа на другой компьютер mac?
Лучший способ извлечь подстроку в bash
Отладчик Python не останавливается на точках останова
Преобразование видео в WebM с помощью ffmpeg/avconv
Bash: получение сообщений от фонового процесса

Как копировать файлы с помощью 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