Я пытаюсь учиться переименовывать файлы с командной строкой, и после просмотра вокруг большого количества страниц я наконец нашел команду, что верхние регистры первая буква файла, но проблема состоит в том, что я хочу понять значение каждой команды. Команда:
for i in *; do new=`echo "$i" | sed -e 's/^./\U&/'`; mv "$i" "$new";done
Я понимаю 'для' вида..., но не 'эхо' или ''' и особенно команда sed. если бы у кого-то есть немного терпения объяснить значение каждой вещи, это было бы потрясающим!Спасибо!
for i in *;
do new=`echo "$i" | sed -e 's/^./\U&/'`;
mv "$i" "$new";
done;
Был бы весь код, сломанный для создания этого легко видимым, объясню я ниже.
Сначала мы должны удостовериться, что обрабатываем каждый файл, следующие средства строки: "Сделайте следующее, пока можно найти файлы"
for i in *;
Затем мы должны загрузить текущий filname (который хранится в переменном $i), замените первую букву капитализированной версией и сохраните новое имя (в переменном $new).
Следующая команда в основном означает: Сделайте переменный $new (do new=
) $i загрузки и вперед это ("$i" |
) к функции, которая заменяет первую букву капитализированной. (sed -e 's/^./\U&/'
;`)
sed страница руководства может быть найдена здесь. Это используется для выполнения основных текстовых преобразований. То, что, в основном делает, использовать регулярное выражение ( 's/^./\U&/'
часть) (способ обнаружить определенный шаблон в тексте) для обнаружения первых символов, которые не капитализированы и заменяют его капитализированной версией.
do new=echo "$i" | sed -e 's/^./\U&/';
После того, как мы получили новое имя, пора переименовать файл с, он - новое капитализированное имя, следующая команда делает это.
Это говорит: переместитесь (то же, как переименовывают), старый файл foo.bar к новому Foo.bar.
mv "$i" "$new";
Таким образом, нам теперь переименовали один файл, и пора переместиться в следующее. Следующее завершает для функции, говоря это пора теперь идти дальше и обработать следующий файл.
done;
Вот несколько других методов в случае, если Ваш sed
не поддерживает \U
:
for i in *; do first=$(echo "${i:0:1}" | tr '[:lower:]' '[:upper:]'); new=$first${i:1}; mv "$i" "$new"; done
Если у Вас есть Bash 4:
for i in *; do mv "$i" "${i^}"; done
Добро пожаловать в Bash, где примерно все возможно если не сразу очевидный.
Объяснение BloodPhilia очень хорошо для Вашего определенного запроса. Если Вам интересно, вот некоторые дополнительные веб-ресурсы для узнавания больше:
Bash:
Sed (который является 'S'tream 'ED'itor):