Вдохновлен этим вопросом. Оригинальный вопрос, в общем, «Как превратить :2f в - во всех файлов в папке». Например, если у меня есть файл ./abc:2fdef он должен быть переименован в ./abc-def .
Сначала я думал, что это простая задача ... find все файлы, а затем sed заменить :2f в - . При попытке построить однострочник, я прихожу с командой:
find . -type f -name '*:2f*' | xargs -I {} mv {} $(echo {} | sed "s/:2f/-/ig")
Однако это не работает. Проведя много тестов, я обнаружил, что проблема заключается в части xargs - $() был выполнен до того, как xargs поместит вместо {} имена файлов. Разрабатывать,
xargs -I {} mv {} $(echo {} | sed "s/:2f/-/ig")
был оценен как ($(...) был оценен)
xargs -I {} mv {} {}
а потом
mv ./abc:2fdef ./abc:2fdef
Что было не то, что я ожидаю. Итак, мой вопрос: могу ли я сделать так, чтобы xargs подставлял все {} в имена файлов перед вычислением части $(...) ?
