История изменений
Исправление vodz, (текущая версия) :
Варианту с -exec не хватает лёгкости.
Оно лёгкое, если б не условие с манипуляциями с амперсандами в паттерне sed-а. Ведь согласитесь, обязательный амперсанд в имени файла — это явно ошибка при создании этого архива с файлами :) Ну а главное — это, конечно, не требует каяться, что скрипт имеет ограничение - не допускает \n в имени файла. В вашем варианте лёгкость мнимая, так как два пайпа для системы совсем не лёгкость по нагрузке. Безусловно, $(cmd) — тоже пайп, лучше переписать без sed-а и сразу лёгкость появляется:
#!/bin/bash
find . -name '*bla*' -type f -exec sh -c 'for i; do
out=${i##*- }
echo mv "$i" "${i%/*}/${out%?}"
done' . '{}' +
Даже башизма нет, в ash заработает.
Исправление vodz, :
Варианту с -exec не хватает лёгкости.
Оно лёгкое, если б не условие с манипуляциями с амперсандами в паттерне sed-а. Ведь согласитесь, обязательный амперсанд в имени файла — это явно ошибка при создании этого архива с файлами :) Ну а главное — это, конечно, не требует каяться, что скрипт имеет ограничение - не допускает \n в имени файла. В вашем варианте лёгкость мнимая, так как два пайпа для системы совсем не лёгкость по нагрузке. Безусловно, $(cmd) — тоже пайп, лучше переписать без sed-а и сразу лёгкость появляется:
#!/bin/bash
find . -name '*bla*' -type f -exec sh -c 'for i; do
path=${i%/*}
out=${i##*- }
echo mv "$i" "$path/${out%?}"
done' . '{}' +
Даже башизма нет, в ash заработает.
Исходная версия vodz, :
Варианту с -exec не хватает лёгкости.
Оно лёгкое, если б не условие с манипуляциями с амперсандами в паттерне sed-а. Ведь согласитесь, обязательный амперсанд в имени файла — это явно ошибка при создании этого архива с файлами :) Ну а главное — это, конечно, не требует каяться, что скрипт имеет ограничение - не допускает \n в имени файла. В вашем варианте лёгкость мнимая, так как два пайпа для системы совсем не лёгкость по нагрузке. Безусловно, $(cmd) — тоже пайп, лучше переписать без sed-а и сразу лёгкость появляется:
#!/bin/bash
find . -name '*bla*' -type f -exec sh -c 'for i; do
path=${i%/*}
out=${i##*- }
out=${out%?}
echo mv "$i" "$path/$out"
done' . '{}' +