2

Я использую Mac OS 10.8.4 и хочу сделать несколько пакетных переименований, используя Terminal, который, я думаю, является оболочкой bash. У меня есть большое количество папок с большим количеством файлов. В именах файлов есть слова, общие для других файлов в этой папке, которые я хотел бы обнаружить и удалить (исключая суффикс файла).

Например:

Папка 1 содержит файлы:

blo 123b 2blah 5blah.pdf
blo hazel 124 2blah 5blah.pdf
blo 125 2blah 5blah.pdf

Папка 2 содержит файлы:

534a blee9.pdf
b546 blee9.pdf
back 675 blee9.pdf

И я хочу переименовать их в

Папка 1

123b.pdf
hazel 124.pdf
125.pdf

Папка 2

534a.pdf
b546.pdf
back 675.pdf

У меня есть приложения, которые можно найти и заменить, но они требуют, чтобы я вручную указал, что искать. Но я не буду знать заранее, что это, не глядя вручную. Кроме того, может быть несколько слов для замены.

Поэтому я подумал, что мог бы сделать что-то вроде этого:

for each folder {
list all the filenames > output.txt
use grep, replace all word breaks with carriage returns
sort the list alphabetically
use uniq in some way to detect the words I want to remove, and list them
iteratively remove all these words from the file names
}

Несколько дополнительных соображений: слово может содержать символы, такие как =, -,+ и так далее. Я хочу использовать [пробел] в качестве разделителя слов.

Может кто-нибудь помочь с этим?

2 ответа2

0

Я бы сделал это в Perl, потому что я не так хорош в Bash.

  1. рекурсивно зацикливать все папки (ищите алгоритм обхода дерева, довольно простой)
  2. Для каждой папки перечислите все файлы с помощью ls
  3. использовать split(' ', sfilename); составить список использованных слов. Вставить в список @common_words
  4. Для каждого следующего файла разделите его имя таким же образом и удалите любое слово из @common_words не в $filename . (например, с помощью perl's grep, или используйте цикл)
  5. Как только у вас есть список общих слов, повторите цикл над файлами, и для каждого
  6. Для каждого файла, для каждого слова переименуйте файл, чтобы удалить слово (используя mv bash с system perl)
  7. сделанный.

Вот стартовый скрипт , который должен быть переработан, но решает вашу проблему.

Проблемы :

  • Если все ваши файлы заканчиваются на «_word.ext», расширение будет удалено
  • Если вы раскомментируете подстановку, которая должна игнорировать расширение, mv больше не будут работать, поэтому вам придется сохранить имя в хеш: name_without_extention => "name_with_extension '
  • Он анализирует только одну папку, а также использует имена вложенных папок, поэтому вы должны обязательно использовать ее в папке без вложенной папки.

Теперь это зависит от вас, чтобы улучшить это =)

0

Я написал код для файлов в одном каталоге. Сначала я перехожу к этому каталогу в терминале, затем запускаю скрипт python. Он очень хорошо работает для удаления частей имен файлов, таких как 720dpi, без необходимости знать точный текст заранее. Я новичок в Python, поэтому код, вероятно, можно улучшить.

http://pastebin.com/Eb0cQyKd

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .