LINUX.ORG.RU
ФорумAdmin

Создание папок по шаблону

 


0

2

Народ помогите разжиться скриптом который создавал бы каталог с именем других каталогов, но удалял бы из названия папки все что идет после определенного символа. Условно говоря есть папка /home/mail/test@test.ru, нужно в катологе выше создать папку вида /home/test. А все что было в этой папке перекинуть симлинком в новую. Зная точно имя папки это не трудно сделать командами:
mkdir /home/test
ln -s /home/mail/test@test.ru/maildir/ /home/test/
Но как объявить переменную, именем другой папки и срезать не имя домена?

Курим баш и греп

Получится что-то типа:

find -type d | grep -v '^[.]$' | while read gotDirectoryName; do
    username=`echo "$gotDirectoryName" | grep -o '^[a-zA-Z0-9]*';
    echo "Отладка: получено имя папки «$gotDirectoryName», усечено до «$username»";
    mkdir -v "$username/";
    mv -vr "$gotDirectoryName/*" "$username";
    rm -vrf "$gotDirectoryName";
    ln -vrs "$username" "$gotDirectoryName";
done;

Northsoft ★★ ()
Последнее исправление: Northsoft (всего исправлений: 2)

Первый костыль, который пришёл в голову

#!/bin/bash

TARGET_DIR="/home/mail"
SYMBOL="@"
MAILDIR="maildir"
DIRS=`ls $TARGET_DIR/*$SYMBOL*`
for DIR in $DIRS; do
  if test -d "$TARGET_DIR/$DIR/$MAILDIR"; then
    LINKNAME=`echo $DIR | sed "s/$SYMBOL/ /" | awk '{print $1}'`
    ln -s $TARGET_DIR/$DIR/$MAILDIR $TARGET_DIR/$LINKNAME
  fi
done

На работоспособность не тестил, но думаю, логика ясна.

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

Спасибо! И Еще вопрос если смысл ставить проверку на существования симлинка? т.е если уже есть симлинк, то ничего не делаем. Если есть то выпонляем процедуру. Таких папок планируется около 500 примерно.

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

В первом скрипте сразу после «username=...»:

test -L "$username" && continue

Будет проверяться именно симлинк. Если проверять «симлинк или каталог», то заменить "-L" на "-d".

berrywizard ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.