Переименовать файлы в каталоге по имени каталога

$ awk '/SETTINGS START/,/SETTINGS END/ {if (FNR==NR) {a=a"\n"$0}} FNR==NR{next}   /SETTINGS START/{print substr(a,2)} /SETTINGS START/,/CUSTOMIZATION SETTINGS END/{next}  1' file2 file1
ANJALI NISHA

// +++ CUSTOMIZATION SETTINGS START +++

WELCOME ALL

// +++ CUSTOMIZATION SETTINGS END +++

PREETI MONA

Объяснение

awk Неявно цикл через линию файлов по строке. В этом случае у нас первый цикл File2 File2, затем File1.

  • / Настройки начала /, / / ​​{{{if (fnr == nr) {a = a "\ n" $ 0}}}

    Раздел «Настройки из файла2» захвачен в переменной A .

  • FNR == NR {Далее}

    Если мы все еще читаем файл2, пропустите остальные команды и перейдите на следующую строку ввода.

  • / Настройки начала / {Print Substr (A, 2)}

    Если мы доберемся отсюда, мы обработаем файл1. Когда мы видим начало раздела настроек, распечатайте строку, которую мы сохранили в переменной A .

  • / Настройки начала /, / / ​​настройки / настройки Настройки End / {следующая}

    Если мы находимся в разделе «Настройки» файла1, пропустите остальные команды и перейдите к следующей строке ввода.

  • 1

    1 Криптическая скратформа AWK для печати текущей строки. Мы только добираемся до этого утверждения, если мы находимся в File1, но не в разделе «Настройки».

0
28.08.2015, 13:44
3 ответа

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

ls -d XYZ*/* |
sed -n s'|\(XYZ[0-9][0-9]\)\([^/]*\)/\(\2_.*\)|mv & \1\2/\1\3|p' |
cat

и если вы хотите, чтобы команды выполнялись, замените cat на sh .

0
28.01.2020, 02:20

С помощью zsh :

autoload zmv # best in ~/.zshrc
zmv '(XYZ??)(*)/(*)' '$1$2/$1$3'
2
28.01.2020, 02:20

С bash :

for f in XYZ*/*; do mv -v "$f" "${f%/*}/${f:0:5}${f##*/}"; done

Цикл for проходит через все XYZ * каталоги. Затем команда mv переименовывает файлы.

Где:

  • $ f - это исходное имя файла
  • $ {f% / *} - это имя каталога
  • $ {f: 0: 5} - это префикс
  • $ {f ## * /} - это исходное имя файла
2
28.01.2020, 02:20

Теги

Похожие вопросы