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