#r #macos #terminal
#r #macos #терминал
Вопрос:
У меня есть папка с несколькими файлами с именем
автор — год издания — title.pdf например, «Hanahan Weinberg — Cell 2011 — Признаки рака следующего поколения.pdf».
Я хочу изменить их все на
журнал за год — author — title.pdf например, «2011 Cell — Ханахан Вайнберг — признаки рака следующего поколения.pdf»
Есть ли способ сделать это в Mac terminal или в R?
Спасибо
Ответ №1:
Мы можем изменить обратную ссылку после их захвата
sub("^(\w )\s -\s (\w )\s (\w )(.*)", "\3 \2 - \1\4", str1)
#[1] "year journal - author - title.pdf"
данные
str1 <- "author - journal year - title.pdf"
Ответ №2:
Для переименования файлов используйте rename
инструмент командной строки:
rename 's{ (.*?) s*-s* (.*?) s*-s* (.*) }{$2 - $1 - $3}x' *pdf
Регулярное выражение использует модификатор /x
: игнорировать пробелы и комментарии для удобства чтения.
(.*?) s*-s*
: любой символ, повторяющийся 0 или более раз, не жадный ( *?
: соответствие минимальной длины), за которым следует пробел, повторяющийся 0 или более раз, буквенное тире и больше пробелов, повторяющихся 0 или более раз.
Утилита командной строки rename
доступна во многих вариантах. Большинство из них должны работать для этой задачи. Я использовал rename
версию 1.601 Аристотеля Пагальциса. Для установки rename
просто загрузите его Perl-скрипт и поместите его в $PATH
. Или установите rename
с помощью conda
, например, так:
conda install rename
ПРИМЕР:
# Create example input file:
touch 'Doe - 2021 - Foo bar.pdf'
# Dry run - just print, do not rename anything:
rename -n 's{ (.*?) s*-s* (.*?) s*-s* (.*) }{$2 - $1 - $3}x' *pdf
# Actuall rename:
rename 's{ (.*?) s*-s* (.*?) s*-s* (.*) }{$2 - $1 - $3}x' *pdf