Удалите последние X символов из файла с помощью AppleScript

#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. Ты превзошел самого себя! Большое вам спасибо!!!!