Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / сортировка файлов. Bаsh / 6 сообщений из 6, страница 1 из 1
19.05.2009, 13:54:32
    #35994046
shuha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка файлов. Bаsh
здравствуйте. Нужно отсортировать файлы в папке по названиям. Если 5 первых букв названия файла совпадают,то создается папка из этих 5 букв, а файл соответственно перемещается в эту папку.помогите разобраться
...
Рейтинг: 0 / 0
20.05.2009, 02:45:17
    #35995529
avb1003
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка файлов. Bаsh
shuha,
типа так:
do_sort.sh
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
#!/bin/bash
#       Author: avb1003 from www.sql.ru
#       NO WARRANTY OF  ANY KIND      !
#       TRY BEFORE USE                  !
function usage {
echo "Usage: $1 [-p <pref_len>] <files>"
exit  0 
}
function die {
echo $*
exit  1 
}
[ $# -eq  0  ] && die `usage $ 0 `
[[ $ 1  == -h ]] && usage $ 0 
[[ $ 1  == -p* ]] && {
WIDTH=${ 1 #-p} ; shift
}
[[ -n $WIDTH ]] && {
[[ $WIDTH -gt  0  ]] || WIDTH= 5 
} || {
WIDTH=$ 1  ;
[[ $WIDTH -gt  0  ]] && shift || WIDTH= 5 
}
for i
do
[ -f $i ] || continue           # move only  ordinary files
eval DIR=\${i: 0 :$WIDTH}         # first WIDTH letters of name 
[ -d $DIR ] || mkdir $DIR ||    # If not exists create it
die "Can't mkdir $DIR"          # or die if can't
mv $i $DIR ||                   # do move
die "Can't move $i to $DIR"     # or die if can't
done
...
Рейтинг: 0 / 0
20.05.2009, 19:58:55
    #35997598
shuha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка файлов. Bаsh
avb1003,

спасибо большое. Правда скрипт не работает не проходит первая и вторая строки после обьявления функций. Хотелось бы все таки обьяснения вашего скрипта, не понял строки после обьявления функций и до цикла for. Если не тяжело обьясните их суть
...
Рейтинг: 0 / 0
20.05.2009, 21:18:49
    #35997692
avb1003
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка файлов. Bаsh
shuhaavb1003,

спасибо большое. Правда скрипт не работает не проходит первая и вторая строки после обьявления функций.
Это, как минимум, интересно. Скрипт был проверен на
Код: plaintext
1.
2.
3.
Linux Mandrake 9.0 kernel 2.4.28 & GNU bash, version 2.05b
и
CYGWIN-5.1 & Gnu bash, version 3.4.48
Работоспособность была проверена и сейчас после копирования из браузера.
Интересно узнать версию вашей OS, вашего bash и конкретный пример запуска с результатом.
shuha...Хотелось бы все таки обьяснения вашего скрипта, не понял строки после обьявления функций и до цикла for. Если не тяжело обьясните их сутьВы, наверное, совсем не знаете bash или английский, так как
в "рабочей" части скрипта прокомментирована каждая строка.
from do_sort.sh
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
#  ....
# пропущенная "красота" написана для выбора длины имени папок, которая помещаетсся в переменную WIDTH
# c какой-то минимальной обработкой заданных параметров
# Варианты запуска :
#                                  do_sort.sh *   - для "сортировки" всех файлов в каталоге по первым  5 -символоам имени.
#                                  do_sort.sh -p  4  *.log       - для сортировки *.log файлов по первым  4 -символоам имени.
#                                  do_sort.sh -p3  *.dat      - для сортировки *.dat файлов по первым  3 -символоам имен
#
for i                              #  Цикл  по всем параметрам (именам файлов)
do
[ -f $i ] || continue           # E сли файл - не "обычный"(например, каталог), то продолжение цикла
eval DIR=\${i: 0 :$WIDTH}         # первые WIDTH символов имени.
                                                 #  Если  5  - "навсегда", то можно напмсать:
                                                 #  DIR=${i: 0 : 5 }   - присвоить в пересенную DIR  5  символов переменной i- имени текущего файла.
                                                  #   
[ -d $DIR ] || mkdir $DIR ||    # Если не существет каталог(папка) с именем $DIR, то попробовать ее создать
die "Can't mkdir $DIR"          #  если не удалось, то прекратить выполнение скрипта.
mv $i $DIR ||                   #   Осуществить перемещение
die "Can't move $i to $DIR"     # если не удалось, то прекратить выполнение скрипта.
done                                        # конец цикла
...
Рейтинг: 0 / 0
22.05.2009, 11:10:10
    #36001198
shuha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка файлов. Bаsh
avb1003,

Спасибо, действительно все заработало.
Нужна лишь проверка одинаковости 5 первых букв файла. Если они одинаковы то скрипт работает лишь с ними, в протином случае не работает вовсе. Заранее спасибо
...
Рейтинг: 0 / 0
23.05.2009, 07:56:43
    #36003173
avb1003
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка файлов. Bаsh
shuha,
shuha...
Правда скрипт не работает не проходит первая и вторая строки после обьявления функций.
...
avb1003
...
Это, как минимум, интересно.
...
shuha...
действительно все заработало.
...Не раскрыта тема неработоспособности скрипта.
shuha...
Нужна лишь проверка одинаковости 5 первых букв файла.
...
Код: plaintext
1.
do_sort.sh `ls - 1  | egrep -e "(.)\1\1\1\1"`
или
"исправленный" do_sort.sh
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
...
A="....."                          #  - пять точек
for i
do
[[ ${i: 0 : 5 } == ${A//./${i: 0 : 1 }} ]] || continue     #  - если первые пять символов ==  строке из 
                                                                  #  упятиреного первого символа продолжить
                                                                  # выполнение текущей итерации.
[ -f $i ] || continue           # move only  ordinary files
...
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / сортировка файлов. Bаsh / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]