вы можете использовать команду no-op (ничего не делать), в оболочке это :
elif [ $Useranswer = n]; then
:
fi
иначе вы можно использовать команду exit
, которая используется для завершения сценариев. Команда может иметь статус выхода от 0 до 255. Только exit 0
означает успех, все остальные коды состояния выхода описывают какой-то сбой (а это не то, что вам нужно). Также вы можете сделать следующее:
elif [ $Useranswer = n]; then
exit 0
fi
Но в этом случае остальная часть скрипта не будет выполнена, потому что exit действительно завершит скрипт в этой точке, например: если пользователь нажмет «n», вы никогда не получите вывод echo «Все сделано!
Если у вас есть Perl-версия rename
(, иногда называемая prename
), вы можете использовать это
rename -n 's/^0*(\d+).*(\.m4a)\z/$1$2/s' [0-9]*.m4a
Когда вы будете счастливы, что он будет делать то, что вы хотите, снимите флаг -n
.
Здесь используется сопоставление с регулярным выражением:
^
-требуется запуск -темы -0*
-соответствует нулю или более "0" (\d+)
-соответствует и запоминает одну или несколько десятичных цифр .*
-сопоставить все до... (\.m4a)
-соответствует и запоминает литерал ".m4a" \z
-требуется конец -из -тема¹ s
флаг -убедитесь, что .
соответствует любому байту (, включая новую строку, также допустимо в именах файлов), а затем использует $1
и $2
для ссылки на значение выражений в квадратных скобках.
¹ Здесь нет строгой необходимости, так как все имена файлов, передаваемые оболочкой в качестве аргумента, заканчиваются на .m4a
, а предыдущий .*
является жадным. $
также будет работать здесь, но в rename
, который работает с именами файлов (, которые могут быть любой последовательностью не -0 байтов, включая новую строку ), \z
предпочтительнее, так как $
соответствует в конец темы, такой как \z
, но также перед возможным последним символом новой строки.
Как бы для
for FN in *.m4a; do mv -i "$FN" "${FN%% *}.m4a"; done
понял?