Как копировать файлы с помощью 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")   ' ;
30
задан rndy
09.04.2023 2:16 Количество просмотров материала 2676
Распечатать страницу

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 2023-04-10 10:04

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя

Похожие вопросы про тегам:

bash
find
macos
regex
sed
Вверх