Как удалить все части имени файла после первой точки на Mac - PullRequest
2 голосов
/ 16 января 2020

Я пытаюсь сделать это на терминале ma c

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

Ввод:

file1.some.stuff.mp3 file2.other.stuff.stuff.mp3 file3.some.thing.mp3 file4.one.two.three.four.mp3

Ожидаемый вывод:

file1.mp3 file2.mp3 file3.mp3 file4.mp3

У меня все файлы в одной папке.

Ответы [ 3 ]

4 голосов
/ 16 января 2020

Если в именах файлов гарантированно указан хотя бы один . с непустыми строками перед и после ., то это вопрос простых расширений параметров.

for f in file1.some.stuff.mp3 file2.other.stuff.stuff.mp3 file3.some.thing.mp3 file4.one.two.three.four.mp3; do
    echo "${f%%.*}.${f##*.}"
done

производит

file1.mp3
file2.mp3
file3.mp3
file4.mp3

В каталоге, куда выходят файлы, используйте что-то вроде

for f in *.mp3; do

, чтобы перебрать все файлы MP3.

2 голосов
/ 16 января 2020

Используя bash подстановку переменных, вы можете достичь следующего:

for i in file1.some.stuff.mp3 file2.other.stuff.stuff.mp3 file3.some.thing.mp3
do
  echo "${i/.*./.}"
done

${i/.*./.} означает заменить .*. на .. То есть он будет соответствовать .some.stuff. в file1.some.stuff.mp3 и .b.c.d. в a.b.c.d.e.

В расширении параметра в секции man bash:

$ {параметр / шаблон / строка} Замена шаблона. Шаблон расширяется, чтобы создать шаблон так же, как в раскрытии пути. Параметр раскрывается, и самое длинное совпадение шаблона с его значением заменяется на строку.

0 голосов
/ 16 января 2020
for i in `ls *.mp3`; do NAMES=`echo $i|cut -d. -f1`; mv "$i" "$NAMES.mp3"; done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...