LINUX.ORG.RU

История изменений

Исправление 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' . '{}' +