пятница, 19 октября 2007 г.

Скрипт для скачки структуры ftp-сервера

Решил написать такой, чтобы рассмотреть, что есть на некоторых наших богатых ftp-серверах, без подключения..

Долго извращался с bash'ем, пока не дошел до переменной IFS :)

В общем вот скрипт:

get_listing:
 #!/bin/bash  
 if [ "$1" == "" ]  
 then  
   echo "Usage: `basename $0` server"  
   exit  
 fi  
 server=$1  
 base=$PWD  
 IFS=$'\n'  
 function get_listing()  
 {  
   local prev_dir=$PWD  
   local url=  
   if [ "$1" != "" ]  
   then  
      url=$1  
      echo "Creating dir: $2"  
      mkdir "$2"  
      cd "$2"  
   fi  
   echo "Retreiving file list $url"  
   curl ftp://$server$url/ 2> /dev/null > listing  
   lst=`cat listing | grep "^d" | grep -v "\.$" | xargs -I'{}' $base/get_fname "{}"`  
   for f in $lst  
   do  
      get_listing "${url}/$f" "$f"  
   done  
   cd $prev_dir  
 }  
 get_listing  

get_fname:
 #!/bin/bash  
 echo `expr match "$1" '\\S*\\s*\\S*\\s*\\S*\\s*\\S*\\s*\\S*\\s*\\S*\\s*\\S*\\s*\\S*\\s*\(.*\)'`  

Как засунуть get_fname в сам скрипт, так и не понял...
Пробовал $() внутри ``, и наоборот, и по всякому..

Комментариев нет: