2017-02-10 13 views
1

У меня есть большое количество файлов, которые названы в формате: ABC_XYZ_123.jpg.Удалить все нечисловые символы в имени файла

Я хочу переименовать их навалом, чтобы получить формат: 123.jpg.

Как это сделать на Mac?

Спасибо!

+0

ли они все в одном каталоге, или есть иерархия? Может ли быть 'ABC_123.jpg', а также' DEF_123.jpg'? –

ответ

1

Использование find в терминале:

find . -type f -name "*_*_*.jpg" -execdir bash -c 'mv "$0" "${0##*_}"' {} \; 

приведет ли:

ABC_XYZ_123.jpg -> 123.jpg 
+1

Спасибо! Это сработало! – ABZ

+0

Итак, я пытаюсь понять, что делает mv "$ 0" "$ {0 ## * _}". Не могли бы вы объяснить мне это? Я хотел бы иметь возможность повторно использовать это, чтобы переименовать другие форматы имен. Благодаря! – ABZ

+0

Это называется [расширение параметров оболочки] (https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html), и в основном происходит то, что переменная '$ 0' становится именем файла, который соответствует шаблону '* _ * _ *'. При использовании в фигурных скобках '$ {}' он работает как средство «на лету» для обработки строк. '## *' означает совпадение самого длинного шаблона, пока он не встретит '_', который будет удален. Я понимаю, что это звучит довольно сложно, хотя, как только вы используете его несколько раз, это имеет больше смысла; связанная страница содержит несколько полезных примеров, поэтому попробуйте их! –

0

Потому что я никогда не могу вспомнить командные строки кале, которые специализируются на такого рода вещи (как rename) создать bash скрипт, который делает задачу:

$ ls > x.sh 
$ vi x. sh 

Within VI:

:%s/^[a-z_]*\(.*\)$/mv \0 \1/` 

, а затем:

$ source x.sh 

rename может делать подобные, но, как я уже сказал, я никогда не удосужился его изучить.

$ brew install rename 
+0

Я не пробовал это, но спасибо! – ABZ

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

  • Нет связанных вопросов^_^