Как обновить имя файла рекурсивно - PullRequest
0 голосов
/ 09 октября 2019

У меня есть файлы свойств, такие как Abc_name_0.1.properties xyz_name1_0.2.properties Dfg_zxc_1.0.properties Выходные данные: Abc_name_1.3.5.properties xyz_name1_1.3.5.properties Dfg_zxc_1.3.5.properties

* 1002 для изменения *1001* 1002числа (0.1 / 0.2 / 1.0) с новой строкой рекурсивно в сценарии оболочки.

Я использую команду find, чтобы найти .properties файлы и хочу переименовать только числа из нее. Может ли кто-нибудь помочь мне с этим?

Ответы [ 2 ]

0 голосов
/ 09 октября 2019

Вы можете просто использовать pax:

mkdir ../foo
pax -rw -s /0.1/repl1/g -s /0.2/repl2/g . ../foo

Рекурсивно скопирует все в текущем рабочем каталоге в ../foo с переименованием, как указано в параметрах -s. Или

pax -rw -s /^dir/foo/ -s /0.1/repl1/g -s /0.2/repl2/g dir .

Чтобы скопировать все данные в dir/ в каталог с сестрой foo/

0 голосов
/ 09 октября 2019

find относительно сложно для этого. Проще использовать globstar (для включения рекурсивных глобусов) и rename (версия Perl).

Вы не упомянули особенности, но, надеюсь, это поможет вам начать:

shopt -s globstar
# Remove the "-n" option if the output looks good
rename -v -n 's/[0-9]\.[0-9](?=\.properties$)/newstr/' **/*.properties

Разбивка:

  • rename -v -n - Perl rename с подробными и бездействующими опциями
    • 's/pattern/repl/' - Perl "заменитель": заменить регулярное выражение pattern с repl
      • [0-9]\.[0-9] - цифра, буквальная точка, затем еще одна цифра
      • (?=\.properties$) - просмотр с помощью регулярных выражений, чтобы убедиться, что он совпадает только с числами непосредственно передрасширение файла .properties
      • newstr - замените его на желаемую строку
  • **/*.properties - Рекурсивный глоб: ** совпаденийноль или более подкаталогов
...