2016-01-21 2 views
-1

У меня есть следующий код, который переименовывает, удаляя цифры в начале имени папки, но мне нужно что-то, что удалит буквы и цифры с конца.Удаление суффикса в имени папки с помощью bash

shopt -s extglob 
for f in "[email protected]"; do 
    fpath="${f%/*}" 
    fname="${f##*/}" 
    mv "$f" "$fpath"/"${fname/#+([[:digit:]])_/}" 

Пример

Input - 001_AA_0001_AG1_V1_CD 

Output - 001_AA_0001 
+3

Так удалить все после '_ '? – anubhava

+2

Да, данные вашего примера неоднозначны. Является ли правило действительно удалять все после третьего символа '_'? Или он удаляет все после 4 цифр? ИЛИ ?? Посмотрели ли вы на все ваши папки, и этот пример разрешит все случаи? Подумайте об обновлении своего Q, чтобы устранить вопросы о масштабах вашей проблемы. Удачи. – shellter

+0

Да, я хочу удалить что-нибудь после третьего символа _ _. Я запускаю сценарий bash как часть рабочего процесса Automator. – magicbeansvfx

ответ

0

вам действительно нужно использовать расширение Bash параметра Do? Вот одна строка sed решение:

sed 's/\([0-9]*_[a-zA-Z]*_[0-9]*\).*/\1/' $filename 

Чтобы переименовать файл:

mv $filename $(sed 's/\([0-9]*_[a-zA-Z]*_[0-9]*\).*/\1/' $filename) 

Обратите внимание, что это требует от вас быть в директории, где находится файл.

ДЛЯ Automator:

for filename in "[email protected]" 
do 
    mv "$filename" $(sed 's/\([0-9]*_[a-zA-Z]*_[0-9]*\).*/\1/' $filename) 
done 
  1. Выберите Get Selected Finder Items в качестве первого шага.
  2. Тогда Run Shell Script
  3. Набор Pass input: для as arguments
  4. Установите скрипт, который выше
  5. и вуаля!
+0

Можно ли запустить это внутри Automator? Выполняется действие, ничего не делает? – magicbeansvfx

+0

Он ничего не делает, потому что это просто текстовое представление. См. Мое редактирование. Также вы имеете в виду OS X Automator? В противном случае я не знаю, что вы подразумеваете под Automator. И я не очень хорошо знаю Automator. И я уверен, что вы хотите сделать, вы можете сделать это, используя исключительно сценарий оболочки. – hgiesel

+0

Благодарим вас за ответ henrikgiesel. Да - Automator в OSX. Я пытаюсь запустить переименование как часть более крупного рабочего процесса. Есть ли способ сказать сценарию SED для запуска на том, что было выбрано? – magicbeansvfx

0

Я решил эту проблему, но не использовал bash. Вместо этого я нашел набор заранее подготовленных действий Automator. Пакет Action Automator может использоваться для удаления символов из начала или конца строки. Я использовал это, чтобы переименовать свои папки.

http://www.automatedworkflows.com/products/apps/automator-actions-for-mac-os-x-10-610-7-snow-leopard-lion/

Смежные вопросы