ошибка сценария переименования файлов

Я написал код, чтобы изменить имя массива файла, он должен заменить пробелы подчеркиванием и подчеркивать все имена файлов.

это код

for file in *;
do mv "$file" `echo $file | sed -e 's/  */_/g' -e 's/_-_/-/g'`;
do mv -f "$file" `echo "$file" | tr A-Z a-z`;
done;

Я знаю переменная $file изменится после 2-й строки, поэтому она будет давать ошибку в 3-й строке

Я могу разделить ее на 2 цикла, и тогда она будет работать, но мне нужно посоветовать, как преодолеть это в одной for только петля

0
задан 23 August 2015 в 09:57

1 ответ

Для переименования файлов, вероятно, более просто использовать perl's rename утилита (иногда называемый prename). Я предположу, тем не менее, что Вы делаете это как упражнение в изучении сценариев оболочки.

Для решения непосредственной проблемы все, в чем Вы нуждаетесь, является второй переменной оболочки, здесь названной new:

for file in *
do
    new=$(echo "$file" | sed -e 's/  */_/g' -e 's/_-_/-/g')
    mv -f "$file" "$(echo "$new" | tr A-Z a-z)"
done

Другой подход должен расширить конвейер:

for file in *
do
    mv -f "$file" "$(echo "$file" | sed -e 's/  */_/g' -e 's/_-_/-/g' | tr A-Z a-z)"
done

, Если у Вас есть GNU sed, затем конвейер может быть упрощен далее:

for file in *
do
    mv -f "$file" "$(echo "$file" | sed -e 's/  */_/g' -e 's/_-_/-/g' -e 's/.*/\L&/')"
done

Примечания

  1. , Так как Вы использовали -f опция к mv, возможно, что этот сценарий заставит файлы в Вашем каталоге быть перезаписанными и их потерянное содержание.

  2. Рассматривают использование $(...) вместо одинарных левых кавычек для замены команды. Долларовые-parens вложенные множества формы хорошо, это визуально ясно, и это избегает, что беспорядок, который происходит, потому что много шрифтов не показывают четкое различие между задними галочками и регулярными галочками.

  3. Много языков требуют точки с запятой в конце каждой команды. оболочка не является одним из тех языков: символ новой строки заканчивает команду просто способ, которым делает точка с запятой.

1
ответ дан 23 August 2015 в 19:57

Другие вопросы по тегам:

Похожие вопросы: