for name in /hw1/textarchive/*.pro; do
newname=${name%.pro}.txt
echo mv "$name" "$newname"
done
или короче,
for name in /hw1/textarchive/*.pro; do
echo mv "$name" "${name%.pro}.txt"
done
(удалите echo
, если уверены, что все работает правильно)
Это перебирает все .pro
файлы в /hw1/textarchive
и переименовывает их в .txt
файлы. Замена ${name%.pro}
удалит расширение .pro
в конце имени в $name
.
Если вы хотите переименовать все файлы:
for name in /hw1/textarchive/*; do
echo mv "$name" "${name%.*}.txt"
done
${name%.*}
удалит любое расширение в конце имени. Существующие файлы .txt
также будут обработаны, но их имена не изменятся. Файлы без расширения получат новое расширение .txt
. Это также подберет имена не -файлов (, таких как каталоги ),поэтому следующее изменение пропустит эти:
for name in /hw1/textarchive/*; do
test -f "$name" || continue
echo mv "$name" "${name%.*}.txt"
done
Возможно, стоит убедиться, что в каталоге еще нет записи с новым именем.:
for name in /hw1/textarchive/*; do
test -f "$name" || continue
test -e "${name%.*}.txt" && continue
echo mv "$name" "${name%.*}.txt"
done
О другой эквивалентной форме:
for name in /hw1/textarchive/*; do
if [ -f "$name" ] && [ ! -e "${name%.*}.txt" ]; then
echo mv "$name" "${name%.*}.txt"
fi
done
Тест -f
проверяет существование заданного обычного файла. Тест -e
проверяет существование заданного имени (независимо от того, какое это имя ).
Для этого решения не требуетсяbash
(толькоsh
-совместимая оболочка ).
Таким образом, рабочим решением для меня было обновить флаг -af
.ffplay -autoexit -nodisp -f mp3 -i $ICECASTURL -af asetnsamples=44100,astats=metadata=1:reset=1,ametadata=print:key=lavfi.astats.Overall.RMS_level
Параметр asetnsamples сообщает ffplay, какой размер выборки вам нужен. Поскольку я запускаю звук с частотой 44100 Гц, я установил размер выборки на это значение, и поэтому он обновляется только каждую секунду. Резкое уменьшение размера файла, в который я записываюсь.