Объяснение команды к верхнему регистру первая буква имени файла

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

for i in *; do new=`echo "$i" | sed -e 's/^./\U&/'`; mv "$i" "$new";done

Я понимаю 'для' вида..., но не 'эхо' или ''' и особенно команда sed. если бы у кого-то есть немного терпения объяснить значение каждой вещи, это было бы потрясающим!Спасибо!

7
задан 16.10.2013, 23:38

4 ответа

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;
16
ответ дан 07.12.2019, 14:28

Вот несколько других методов в случае, если Ваш 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
6
ответ дан 07.12.2019, 14:28

Добро пожаловать в Bash, где примерно все возможно если не сразу очевидный.

Объяснение BloodPhilia очень хорошо для Вашего определенного запроса. Если Вам интересно, вот некоторые дополнительные веб-ресурсы для узнавания больше:

Bash:

Sed (который является 'S'tream 'ED'itor):

4
ответ дан 07.12.2019, 14:28

И если у Вас есть zsh:

for i in *; do mv $i ${(C)i}; done
-1
ответ дан 07.12.2019, 14:28

Теги

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