#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