Вдохновлен этим вопросом. Оригинальный вопрос, в общем, «Как превратить :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 подставлял все {}
в имена файлов перед вычислением части $(...)
?