Переименуйте файл, когда я не знаю его имени — скрипт оболочки

#bash #shell

#удар #ракушка

Вопрос:

Я пытаюсь переименовать файл, который является единственным файлом в каталоге.

Это загрузка подкаста, который каждый день меняет название, так что я не знаю, как он называется, но он всегда заканчивается .MP3

Я хочу переименовать его в news.mp3

Я попробовал следующее на основе другого решения на этом сайте, но оно добавляет новости в файл

 #!/bin/sh for file in *.MP3; do  mv "$file" "${file/.MP3/news.mp3}" done  

Комментарии:

1. Будет ли когда-нибудь в каталоге больше одного MP3?

2. Сначала вам нужно найти последний mp3-файл, а затем переименовать его

3. Скажите, что имя файла таково foo.MP3 . Затем вы переименуете его foonews.mp3 в тот же каталог. Никакого добавления не происходит. Но будьте осторожны с заглавными буквами: существуют платформы (мне приходит на ум cygwin), которые из-за ограничений операционной системы не могут последовательно различать верхний и нижний регистр в именах файлов. Если вы снова запустите скрипт на такой платформе, он подберет новый файл foonews.mp3 и переименует его в foonewsnews.mp3. Я предлагаю вам запустить свой сценарий с -x включенным, чтобы проверить, что происходит.

4. Другое незначительное примечание: вы не опубликовали, как вы вызываете свой скрипт, но из строки #! скрипта следует, что это не программа bash, и я задался вопросом, почему вы отметили этот вопрос как bash .

Ответ №1:

Если это единственный файл в каталоге, вы можете просто написать следующую команду:

 mv directory_name/* directory_name/news.mp3  

Ответ №2:

В случае, если файлов мало или если каталог пуст:

 shopt -s nullglob src="/path/to/dir/with/files" dst="/destanation/folder" i=1 cd "$src" for f in *; do  mv "$f" "$dst/new_name_$((i  ))" done