Страница 1 из 1

скрипт переименования

Добавлено: 2011-04-20 21:52:12
bagas
Добрый ночи.
Вот сейчас наклепал скипт...но не пойму почему он не работает должным образом.
Скрипт изначально должен проверить существуетли файлы в директории и если да, то переименовать их сегоднешней датой.
Но почемуто имя не меняетсья.
Основая функция скрипта это раскидывая файла по директориям.
Первая часть скрипта проверяет директорию за заполненость файлом...а вторая копирует фаел.
Другие варианты не предлогать, я хочу разобрадться почему в данном случае не работает функция переименования.

Код: Выделить всё

#!/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

Re: скрипт переименования

Добавлено: 2011-04-20 21:54:14
Alex Keda
это всё кривой баш

Re: скрипт переименования

Добавлено: 2011-04-20 22:03:42
bagas
я этот скрипт уже попробывал дома..на linux'e.
Тоже самое, не переименовывает.чисто копирует.

Re: скрипт переименования

Добавлено: 2011-04-20 22:07:57
Alex Keda
а вы думали наложение кривизны линукса на кривизну баша - выпрямит скрипт? =)
врятли =)
=====
по сабжу - напиште на шелле - тогда подскажу чёнить, а на баше - дальше шабанга никогда не смотрю.

Re: скрипт переименования

Добавлено: 2011-04-21 7:16:07
Max Sabadash

Код: Выделить всё

name=`"$f" | cut -f7 -d /`
В твоем случае нужно -f5

Код: Выделить всё

sed -e "s/$1/$2/"
откуда, берутся переменные $1, $2

Даже у "кривого" ;-) bash'а есть ключи -vx

Re: скрипт переименования

Добавлено: 2011-04-21 11:48:11
bagas

Код: Выделить всё

#!/bin/bash
### BEGIN INIT INFO
DIR="/home/bagas/"
SOR="/mnt/share/tmp/док/FreeBSD команды.doc"
TITLE='Копирование завершенно'
DATE=`date +"%Y-%m-%d"`
FINDS="find /home/bagas/ -type f -name *.doc"
#number=0
### END INIT INFO

# Поехали!
IFS=$'\n'
for f in find /home/bagas/ -type f -name *.doc;
do
unset IFS
if [ -f $f ]
then
     name=`$f | cut -f6 -d /`
     newname=`echo $name | cut -f2 -d .`
     cp $name $DATE.$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
Обновил скрипт. переменные $1 $2 это хперементы савил...тоже подправил...
Определил переменную...потомучто файлы с пробелами.
IFS=$'\n' перемешаю строку в низ
но все равно переименовываться не хочет.
но толку нету скрипт проглатываеться...но файл не переименовывается.

Re: скрипт переименования

Добавлено: 2011-04-21 11:58:27
rmn

Код: Выделить всё

     mv "$DIR$name" "$DIR$newname"
?

Re: скрипт переименования

Добавлено: 2011-04-21 13:22:24
bagas
mv $name $DATE.$newname
ошибся чудок.

Re: скрипт переименования

Добавлено: 2011-04-21 13:32:16
rmn
ну тогда:

Код: Выделить всё

mv "$DIR$name" "$DIR$DATE.$newname"

Re: скрипт переименования

Добавлено: 2011-04-21 13:44:57
bagas
сделал не помогает...

Код: Выделить всё

FINDS="`find /home/bagas/ -type f -name '*.doc'`"
IFS=$'\n'
for f in $FINDS;
do
unset IFS
if [ -f "$f" ]
then
     name=`echo "$f" | cut -f6 -d /`
     newname=`echo "$name" | cut -f2 -d .`
     mv "$DIR$name" "$DIR$DATE.$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

Re: скрипт переименования

Добавлено: 2011-04-21 13:49:44
rmn
добавь

Код: Выделить всё

name=`echo "$f" | cut -f6 -d /`
newname=`echo "$name" | cut -f2 -d .`
echo "$name - $newname"
и покажи, что скрипт пишет в консоль

Re: скрипт переименования

Добавлено: 2011-04-21 14:43:46
Max Sabadash
откуда берется $SOR ?

Как и писал выше, попробуй для отладки воспользоваться ключами -vx

Код: Выделить всё

#!/bin/bash -vx
И вообще, слишком сложно придумываешь. Попробуй посмотреть в эту сторону:

Код: Выделить всё

#!/bin/bash

mydate=`date +%Y`
dir="/home/maxim"

for file in `find ${dir} -type f -name '*.txt'`
do
  newname="${mydate}-`basename ${file}`"
  mv $file ${dir}/${newname}
done

Re: скрипт переименования

Добавлено: 2011-04-21 15:54:35
bagas
rmn писал(а):добавь

Код: Выделить всё

name=`echo "$f" | cut -f6 -d /`
newname=`echo "$name" | cut -f2 -d .`
echo "$name - $newname"
и покажи, что скрипт пишет в консоль

Код: Выделить всё

     name=`echo "$f" | cut -f6 -d /`
     newname=`echo "$name" | cut -f1 -d .`
     echo "$name - $newname"
Добавил, вывода нету...значит что то с циклом...
Max Sabadash писал(а):откуда берется $SOR ?

Как и писал выше, попробуй для отладки воспользоваться ключами -vx

Код: Выделить всё

#!/bin/bash -vx
И вообще, слишком сложно придумываешь. Попробуй посмотреть в эту сторону:

Код: Выделить всё

#!/bin/bash

mydate=`date +%Y`
dir="/home/maxim"

for file in `find ${dir} -type f -name '*.txt'`
do
  newname="${mydate}-`basename ${file}`"
  mv $file ${dir}/${newname}
done

Вроде переменная $SOR определенна, и она работает..
SOR="/mnt/share/tmp/док/FreeBSD команды.doc"
Не работает только переименования файлов.

#!/bin/bash -vx
отладку добавил, но толку нету.

Re: скрипт переименования

Добавлено: 2011-04-21 16:10:04
Max Sabadash
Ну так выложи вывод!!!

Re: скрипт переименования

Добавлено: 2011-04-21 16:21:36
bagas
он на дисплей ничего не выводит.
Если в файл отладочную информацию выводит, то скажите в какой?

Re: скрипт переименования

Добавлено: 2011-04-21 17:08:27
Max Sabadash
А можно полюбопытствовать как ты его запускаешь?

Re: скрипт переименования

Добавлено: 2011-04-21 17:32:13
bagas
хмм...
я честно говоря непонял как его запустить...
как ты посоветовал , укозал #!/bin/bash -xv в скрипте, знаю, что это ничего не даст, но все равно указал такой параметр...На аволь, просто уже голова кругом идет, перчитал кучу информации, должно же работать.
и щапускаю скрипт с sh dirrr

Re: скрипт переименования

Добавлено: 2011-04-21 17:51:52
Max Sabadash
Попробуй без sh

Re: скрипт переименования

Добавлено: 2011-04-21 18:23:15
Max Sabadash
И bash в BSD лежит в /usr/local/bin
Считается вражеским.

Re: скрипт переименования

Добавлено: 2011-04-21 18:29:06
bagas
я бинарник скопировал из /usr/local/bin в /bin/

Re: скрипт переименования

Добавлено: 2011-04-21 21:56:20
bagas
Всем спасибо, за содействие.разобрался.

Код: Выделить всё

#!/bin/bash -vx
### 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'`"
NUM_MV=0
NUM_CP=0
### END INIT INFO

# Поехали !
IFS=$'\n'
    for f in $FINDS;
do
unset IFS
             n=`echo "$f" | cut -f1 -d .`
             n1=`dirname "$f"`
             mv -n "$f" "$n1/$DATE.doc"
             let "NUM_MV += 1"
done
    for i in $( ls $DIR | grep [0-9] );
do
             src=$i
             mkdir -p "$DIR$src/S"
             cp "$SOR" "$DIR$src/S"
             let "NUM_CP += 1"
done
             sh /root/sm "$TITLE".Общее количество файлов переименовано >>"$NUM_MV"<<, общее количество файлов с копировано >>"$NUM_CP"<<.
exit 1