[решено] скрипт переименовка файлов
bagas 20 апреля, 2011 - 22:19
Добрый ночи.
Вот сейчас наклепал скипт...но не пойму почему он не работает должным образом.
Скрипт изначально должен проверить существуетли файлы в директории и если да, то переименовать их сегоднешней датой.
Но почемуто имя не меняетсья.
Основая функция скрипта это раскидывая файла по директориям.
Первая часть скрипта проверяет директорию за заполненость файлом...а вторая копирует фаел.
Другие варианты не предлогать, я хочу разобрадться почему в данном случае не работает функция переименования.
#!/bin/bash ### BEGIN INIT INFO DIR="/home/bagas/Видео/" SOR="/home/bagas/doc/АКТ п Фарммед.doc" TITLE='Копирование завершенно' DATE=`date +"%Y-%m-%d"` FINDS="find /home/bagas/Видео -type f -name *.doc" #number=0 ### END INIT INFO # Поехали! for f in $FINDS; do if [ -f "$f" ] then name=`"$f" | cut -f7 -d /` newname=`echo $name | sed -e "s/$1/$2/"` mv "$name" "$newname" #let "number += 1" fi done for i in $( ls $DIR | grep [0-9] ); do src=$i mkdir -p "$DIR$src/S" cp "$SOR" "$DIR$src/S" done sh /root/sm $TITLE exit 1
»
- Для комментирования войдите или зарегистрируйтесь
0. Делать отступы 1.
0. Делать отступы
1. Понапихать echo для всех переменных
Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.
не понял насчет отступов.
не понял насчет отступов.
Что бы ты не делал , жизнь слишком коротка!
Блог о BSD системах.
# Begin# For ...# ...#
# Begin
# _For ...
# __...
# _Next I
# End
Похоже движок форума лишние пробелы затирает...
To eat, or not to eat?
.
вот так - затирает
а эта строка - это просто подпись
Да, файлы с пробелами в
Да, файлы с пробелами в именах будут отрабатываться с ошибками.
1 Я их экронировал. 2 Скрипт
1 Я их экронировал.
2 Скрипт ни каких ругательств не выдет, проглатывает без отрышки.
Что бы ты не делал , жизнь слишком коротка!
Блог о BSD системах.
for f in $FINDS; здесь FINDS
for f in $FINDS;
здесь FINDS - переменная вида
"имя1<newline>имя2<newline>имя3"
и f пробегает значения "имя1", "имя2", "имя3"но если в имени есть пробелы, например
"имя1<newline>имя2<newline>им я3"
то f пробегает значения "имя1", "имя2", "им", "я3"вот тут возникает проблема.
Перед циклом нужно переопределить переменную IFS, которая определяет разделители в переменных.
разделитель - только newline
В этом случае, конечно, скрипт не будет работать если в имени файлов присутствует newline, но это редкая ситуация, в этом случае можно воспользоваться find ... -exec ...
Обновил
Обновил скрипт
IFS=$'\n' перемешаю строку в низ
но все равно переименовываться не хочет.
Что бы ты не делал , жизнь слишком коротка!
Блог о BSD системах.
смотрите коментарий kaf1, это
смотрите коментарий kaf1, это не единственная ошибка у вас
Кроме кавычек на которые обратил внимание kaf1, нужно добавить ' вокруг *.doc, потому что если в момент запуска find в текущей папке будут файлы с именами оканчивающимися на .doc to они подставятся вместо *.doc
Все переменные надо брать в кавычки "$f", "$name" и тд
здесь видимо пропущено echo
ИзменилFINDS="`find
Изменил
FINDS="`find /home/bagas/ -type f -name '*.doc'`"
уже пробовал запускать с отладочными ключами
#!/bin/bash -vx
Но толку нету..проглатывается без ошибок и ничего не меняеться..
Но есть подозрение , что-что не то с циклов, потому что пробовал такое делать:
данные не выходили...
насчет rename знаю...но зочеться понять в чем не так.
Что бы ты не делал , жизнь слишком коротка!
Блог о BSD системах.
Пример того, как никогда делать НЕ НАДО.
Все мы, рано или поздно, будем там...
Почему?
Почему?
find вообще не выполняется.
find вообще не выполняется. Переменная f в цикле принимает значения:
find
/home/bagas/Видео
...
Разберитесь с кавычками
Хочу такой же лисапет. emerge
Хочу такой же лисапет.
emerge util-linux
man rename
Оно вообще-то не очень.
Оно вообще-то не очень.
Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.
Всем спасибо за содействие.
Всем спасибо за содействие. Разобрался.
Что бы ты не делал , жизнь слишком коротка!
Блог о BSD системах.