Автор Тема: bash срипт за местене на файлове  (Прочетена 2091 пъти)

nov_chovek

  • Напреднали
  • *****
  • Публикации: 536
  • Distribution: Ubuntu 8.10 по принуда
  • Window Manager: Gnome
    • Профил
    • WWW
Здравейте имам една директория със 10 000 файла. Понеже фтп-то нещо цикли като ги качвам на хостинга си мисля, че ако ги пръсна по малки директории и ги качвам на части ще мога да ги кача всичките. Та ако някой може да помогне с bash скрипт, който  да прави следното:

Премества файловете в поддиректории като всяка поддиректория има да речем по 2000 файла. Нямам нужда от сортиране. Просто ги премества на купчини по 2000.

Мерси предварително.
Активен

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Re: bash срипт за местене на файлове
« Отговор #1 -: Oct 27, 2009, 13:04 »
Ето ти един вариант
Код
GeSHi (Bash):
  1. #!/bin/bash
  2.  
  3. papka_s_failove="/папката/с/файловете"
  4. papka_s_papki="/папката/в/която/ще/се/направят/подпапките"
  5. razmer_na_grupata="2000"
  6.  
  7. ##### НЕ Е НУЖНО ПОВЕЧЕ РЕДАКТИРАНЕ #####
  8.  
  9. a=1
  10. mkdir $papka_s_papki/$a
  11. /usr/bin/tree -f -i $papka_s_failove | while read i
  12. do
  13.    y=$(($y+1))
  14.    z=`echo "scale=1; $y/$razmer_na_grupata" | bc`
  15.    if [[ $z == [0-9]*.0 ]]; then
  16.        a=$(($a+1))
  17.        mkdir $papka_s_papki/$a
  18.    fi
  19.    cp "$i" $papka_s_papki/$a
  20. done

Но защо не ги сложиш в един архив и направо да качиш архива?
« Последна редакция: Oct 27, 2009, 13:53 от neter »
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

ntrance

  • Напреднали
  • *****
  • Публикации: 696
    • Профил
Re: bash срипт за местене на файлове
« Отговор #2 -: Oct 27, 2009, 13:32 »
По-просто
Код
GeSHi (Bash):
  1. #!/bin/bash
  2. file1=/home/1
  3. file2=/home/master/2
  4. dir=/home/sysmaster/master
  5. cd $dir
  6. for i in `ls  | head -200`; do mv $i /home/1/; done;
  7. echo "vsichko e primesteno"
  8. sleep  5
  9. cd $dir
  10. for i in `ls  | head -2000`; do mv $i /home/2/; done;
  11. echo "   2000 reda se premesteni "
  12.  
  13.  
Като се размислих
Код
GeSHi (Bash):
  1. for i in `ls  | head -200`; do mv $i /home/1/; done;  
може да се направи като променлива... да стане по-лесно
Горният е по-добър. Моят малко е нагласен :Д
« Последна редакция: Oct 27, 2009, 17:41 от ntrance »
Активен

radoulov

  • Напреднали
  • *****
  • Публикации: 116
    • Профил
Re: bash срипт за местене на файлове
« Отговор #3 -: Oct 27, 2009, 16:17 »
Код
GeSHi (Bash):
  1. limit=2000 i=0 j=0
  2. for f in file*; do
  3.  fs[++i]=$f
  4.  ((i % limit)) || {
  5.    mkdir -p dir_$((++j))
  6.        mv -- "${fs[@]}" "$_"
  7.        fs=()
  8.        }
  9. done
  10. [[ ${#fs} ]] && {
  11.  mkdir -p dir_$j
  12.  mv -- "${fs[@]}" "$_"
  13.  }

« Последна редакция: Oct 27, 2009, 16:21 от radoulov »
Активен


Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
BASH: Как да поддържам една програма работеща
Общ форум
Regia 1 9252 Последна публикация Feb 16, 2005, 08:51
от
bash
Настройка на програми
tuxi 7 4767 Последна публикация Jun 11, 2005, 19:12
от tuxi
Моля за малко помощ за BASH
Настройка на програми
bonbon 3 3538 Последна публикация Dec 04, 2005, 16:37
от bonbon
BASH
Общ форум
Dean79 3 3679 Последна публикация Jan 13, 2006, 00:24
от Dean79
Bash присвояване на стойност от файл
Общ форум
Pulear 6 4295 Последна публикация May 21, 2006, 17:20
от Pulear