обрезать имя файла до его перемещения - PullRequest
0 голосов
/ 23 марта 2019

Я пытаюсь использовать rename для редактирования или обрезки имени файла на месте без использования loop.Обе команды ниже выполняются, но имена файлов остаются без изменений.В моих реальных данных есть несколько имен файлов в формате file.Спасибо:).

файл

19-0000-LastName-FirstName_v1_Non-Filtered_2019-03-21_08:12:56.txt

переименовать

rename "s/_v1_Non-Filtered_d+_\d+//" *.txt
rename 's/_.*?//' *.txt

желаемое имя файла

19-0000-LastName-FirstName.txt

1 Ответ

1 голос
/ 24 марта 2019

Проблема заключается в том, чтобы переименовать файлы, например:

19-0000-LastName-FirstName_v1_Non-Filtered_2019-03-21_08:12:56.txt

в:

19-0000-LastName-FirstName.txt

На английском языке, основываясь на комментариях, это можно указать как:

Удалить все после и включая _v1 (за исключением сохранения расширения)

Это можно сделать с помощью поиска и заменить следующим образом:

rename 's/_v1.*(\..*)/$1/' *.txt
  • match:
    • первое появление _v1
    • , за которым следует как можно больше (.*)
    • с последующим периодом (\.)
    • , за которым следует что-либо (.*)
  • из-за первого .*, явно совпадающий период должен быть последним
  • круглых скобок (... ) захватить часть матча для последующего использования (как $1)
  • заменить весь матч группой захвата

Примечания:

  • шаблон, который вы предоставили, включает в себя раздел _d+_\d+, который из-за пропущенного \ соответствует "подчеркивание", "d" "+" "подчеркивание" "одна или несколько цифр".Это никогда не может совпадать с вашим именем файла.Возможно, вы имели в виду: _\d+
  • s/_.*?// ищет _, за которым следует кратчайшая возможная последовательность (*?) из всего (.).Самая короткая возможная последовательность - пустая строка.Итак, команда эквивалентна: s/_//
...