Я имею о 2k файла, которые в настоящее время находятся в нижнем регистре как:
file_one.cfr
file_two.cfr
....
Я ищу быстрый способ переименовать их к верхнему регистру, таким образом, они были бы похожи;
FILE_ONE.cfr
FILE_TWO.cfr
....
Если я использую от своей оболочки;
for i in *; do mv $i `echo $i | tr [:lower:] [:upper:]`; done
Я могу получить весь файл и расширения файла к верхнему регистру.
Но расширение должно остаться в нижнем регистре, таким образом, мой подход не работает.
Любой язык программирования приветствуется.
если у Вас есть удар 4.0
#!/bin/bash
for file in file_*cfr
do
front=${file%.cfr}
newfile=${front^^}.cfr
echo mv "$file" "$newfile"
done
или можно использовать просто awk
awk '
{
f=FILENAME
gsub(/\.cfr$/,"",f)
newfile=toupper(f)".cfr"
cmd="mv \047"FILENAME"\047 \047"newfile"\047"
# system(cmd) #uncomment to use
}
' file_*cfr
У Вас может уже быть сценарий Perl в Вашей названной системе rename
или prename
.
rename 's/([^.]*)/\U$1/' *.cfr
Или вот версия сценария Vlad, который избавляет от необходимости grep
и sed
(это будет работать в версиях Bash ранее, чем версия 4, так как это использует tr
вместо ^^
оператор):
#!/bin/bash
for f in *.cfr
do
if [[ "$f" == "${f//.}" ]]; then continue; fi
name="${f%.*}"
ext="${f##*.}"
newfullname="$(<<< "$name" tr [:lower:] [:upper:])$ext"
[[ "$f" == "$newfullname" ]] || mv "$f" "$newfullname"
done