LINUX.ORG.RU

Переименовать каталоги в linux

 


0

1

Подскажите, при переносе сайта, не верно были настроены правила переноса каталогов, а заметили уже спустя время....

сейчас есть каталоги от 00 до 99 в них каталоги от 00 до 99 а уже в каждом из них есть каталоги от 00000 до 99999 и вот уже в них есть папка images и прочие....

то есть 00/00/00009 например или 99/98/09909

И вот проблема в том что скрипты для сайта убирают 000 в начале и ищут всю нужную информацию в папках без 0. То есть первые 10000 материалов теперь не находят нужную информацию...

есть варианты через terminal сделать поиск всех каталогов у которых начало имеет 0 и чтобы оно стало без 0 я понимаю что скорее исчезнет только первый 0, но если запустить 5 раз нужную команду, то я избавлюсь от всех нулей? единственное главное чтобы каталоги 00 или 09 не попали под это переименование....

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

перелопатить кучу скриптов, с попыткой понять в каких именно частях будут использовать эти папки? это конечно дело... но с переименованием будет проще...

kuzichev
() автор топика
#! /bin/bash

for i in {00..99}; do
    for j in {00..99}; do
        pushd $i/$j
        for d in 0*; do
            nd=$(echo $d | sed "s/^0+//")
            mv $d $nd
        done
        popd
    done
done

как-то так. не проверял

ananas ★★★★★
()

$10


$ tree .
.
├── 00
│   ├── 00
│   │   ├── 00000
│   │   ├── 00001
│   │   ├── 00002
│   │   └── 99999
│   └── 99
│       ├── 00000
│       ├── 00001
│       ├── 00002
│       └── 99999
└── 01
    ├── 00
    │   ├── 00000
    │   ├── 00001
    │   ├── 00002
    │   └── 99999
    └── 99
        ├── 00000
        ├── 00001
        ├── 00002
        └── 99999
$ find ./*/*/* -maxdepth 0 -type d | while read i; do a=$(dirname $i); b=$(basename $i); bb=$(($b*1)); [ $b != $bb ] && mv $a/$b $a/$bb; done;
$ tree .
.
├── 00
│   ├── 00
│   │   ├── 0
│   │   ├── 1
│   │   ├── 2
│   │   └── 99999
│   └── 99
│       ├── 0
│       ├── 1
│       ├── 2
│       └── 99999
└── 01
    ├── 00
    │   ├── 0
    │   ├── 1
    │   ├── 2
    │   └── 99999
    └── 99
        ├── 0
        ├── 1
        ├── 2
        └── 99999
justAmoment ★★★★★
()
Ответ на: $10 от justAmoment

bb=$(($b*1)); - это круто!

ananas ★★★★★
()
Ответ на: $10 от justAmoment

fix, чтобы правильно в десятичной системе счисления было "10#"

$ find ./*/*/* -maxdepth 0 -type d | while read i; do a=$(dirname $i); b=$(basename $i); bb=$((10#$b*1)); [ $b != $bb ] && mv $a/$b $a/$bb; done;
justAmoment ★★★★★
()
Последнее исправление: justAmoment (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.