LINUX.ORG.RU
ФорумAdmin

Простой скрипт: как вытащить номер из названия текущего каталога ?

 


0

1

Добрый день, нужна помощь. (Я не одмин, просто в линуксе работаю :) )

Есть куча каталогов с названием вида ABC__YYY__XYZ где YYY это цифры от 1 до 999 а ABC и XYZ это текст. __ это просто два знака подчёркивания.

Нужно переименовать файлы в каталогах так, чтобы они начинались с этих цифр YYY.

Как правильно выдернуть эти цифры ?

Спасибо заранее!

Ответ на: комментарий от anonymous

Большое спасибо! Но я, видимо, не до конца описал проблему. Текст XYZ почти всегда различается. Да, а как это так просто echo bla-bla, мне же нужно из названия текущего каталога вырезать эти цифры ? Не въезжаю :)

gregg128
() автор топика

Если я правильно понял задачу:

#!/bin/bash
for i in `ls -d */`
do
 a=`echo \`basename $i\` | awk -F"__" '{print $2}'`
 for j in `ls $i`
 do
  mv "$i/$j" "$i/$a$j"
 done
done

З.Ы. Писал на коленке, так что говнокод.

sT331h0rs3 ★★★★★
()
Ответ на: комментарий от sT331h0rs3

Проверял так:

$ mkdir qwe__123__rty ewq__456__ytr
$ touch qwe__123__rty/asd qwe__123__rty/fgh ewq__456__ytr/jkl ewq__456__ytr/zxc
$ ls qwe__123__rty
asd fgh
$ ls ewq__456__ytr
jkl zxc
После выполнения скрипта:
$ ls qwe__123__rty
123asd 123fgh
$ ls ewq__456__ytr
456jkl 456zxc

sT331h0rs3 ★★★★★
()
Ответ на: комментарий от sT331h0rs3

Большое спасибо, так работает. Только на названиях с пробелами спотыкается, где-то надо кавычки, наверное, воткнуть ? Или экранирование ? Как бы ещё после номера ещё «_» воткнуть для красоты полной ? :) Спасибо ещё раз.

gregg128
() автор топика
Ответ на: комментарий от sT331h0rs3

О, как воткнуть нашёл b=ТЕКСТ и потом mv $a$b$j и т.д. А где экранирование воткнуть, чтобы на пробелах не спотыкалось ?

gregg128
() автор топика
Ответ на: комментарий от gregg128

Как-то так:

#!/bin/bash

OIFS=$IFS
IFS=$'\n'
d='_'

for i in `ls -1 -d */`
do
 a=`echo $i | awk -F"__" '{print $2}'`
 for j in `ls -1 $i`
 do
  mv "$i$j" "$i$a$d$j"
 done
done

IFS=$OIFS
sT331h0rs3 ★★★★★
()
Последнее исправление: sT331h0rs3 (всего исправлений: 1)
rename 's/^([^_]*)__(\d+)__(.*)/$2__$1__$3/' *__*__*
sdio ★★★★★
()
Последнее исправление: sdio (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.