#shell #applescript #script
Вопрос:
Мне нужно настроить множество файлов, чтобы удалить последнюю их часть:
Из этого:
108595-1121_gemd_u65_stpetenowopen_em_f_2021-12-03T161809.511773.zip
На это:
108595-1121_gemd_u65_stpetenowopen_em_f.zip
Всегда нужно удалить 24 символа, и в начале всегда есть подчеркивание. Остальное-случайные числа и символы. Я нашел код ниже, чтобы удалить цифры, но мне нужны символы.
Моя цель состоит в том, чтобы поместить это в сценарий automator с некоторыми другими процессами, но переименование в Automator недостаточно надежно.
Как я могу заставить его удалить X-количество символов? Мой гугл-фу подвел меня.
(:
on run {input, parameters} repeat with thisFile in input tell application "Finder" set {theName, theExtension} to {name, name extension} of thisFile if theExtension is in {missing value, ""} then set theExtension to "" else set theExtension to "." amp; theExtension end if set theName to text 1 thru -((count theExtension) 1) of theName -- the name part set theName to (do shell script "echo " amp; quoted form of theName amp; " | sed 's/[0-9]*$//'") -- strip trailing numbers set name of thisFile to theName amp; theExtension end tell end repeat return input end run
Ответ №1:
Нет необходимости использовать do shell script
здесь, что просто запутывает проблему. Поскольку ваши имена разделены подчеркиванием, просто используйте AppleScript text item delimiters
:
repeat with thisFile in input tell application "Finder" set {theName, theExtension} to {name, name extension} of thisFile set tid to my text item delimiters set my text item delimiters to "_" set nameParts to text items of theName set revisedNameParts to items 1 through -2 of nameParts set newName to revisedNameParts as text set my text item delimiters to tid if theExtension is not in {missing value, ""} then set newName to newName amp; "." amp; theExtension end if set name of thisFile to newName end tell end repeat return input
Что это делает, на словах:
- строки 4 и 5 сначала сохраните текущее значение разделителя текстовых элементов (TID), а затем установите его в ‘_’
- строка 6 разбивает строку имени на список частей строки, разрезая строку имени на символ ‘_’
- в строке 7 отбрасывается последний элемент в этом списке (который является всем после последнего»_»).
- строка 8 отменяет процесс, объединяя сокращенный список текстовых элементов в одну строку, соединяя их с помощью ‘_’
- Оставшаяся часть сбрасывает значение TID в исходное состояние, добавляет расширение в строку и изменяет имя файла
Комментарии:
1. Вау. Это было прекрасно! Можете ли вы немного объяснить, как он выбирал его? Поскольку есть несколько подчеркиваний, как он знает, что не следует удалять их все? Или сколько персонажей?
2. Я изменил ответ с объяснением.
3. Ты превзошел самого себя! Большое вам спасибо!!!!