2013-11-07 18 views
0

Кто-нибудь из вас знаком с Dropbox Uploader (https://github.com/andreafabrizi/Dropbox-Uploader) или командой UNIX sed.Изменить размер шрифта Размер файла

Я хотел бы, чтобы этот скрипт работал, чтобы он возвращал отсортированный список из dropbox на основе измененной даты.

Команда ./droptobox list Test выходы:

Listing "/Test"... DONE 
[F] config.bmp 
[F] igs.bin 

Если сделать некоторые изменения в скрипт (вторя из $DIR_CONTENT), я могу видеть из вывода, что, конечно, информация мне нужна.

{"revision": 37, "rev": "2514cf1330", "thumb_exists": true, "bytes": 824, "modified": "Thu, 07 Nov 2013 16:14:59 +0000", "client_mtime": "Thu, 07 Nov 2013 16:14:59 +0000", "path": "/Test/config.bmp", "is_dir": false, "icon": "page_white_picture", "root": "dropbox", "mime_type": "image/x-ms-bmp", "size": "824 bytes"} 

{"revision": 38, "rev": "2614cf1330", "thumb_exists": false, "bytes": 86, "modified": "Thu, 07 Nov 2013 16:15:18 +0000", "client_mtime": "Thu, 07 Nov 2013 16:15:18 +0000", "path": "/Test/igs.bin", "is_dir": false, "icon": "page_white", "root": "dropbox", "mime_type": "application/octet-stream", "size": "86 bytes"}], "size": "0 bytes"} 

Я полагаю, что это линия, которая отвечает за него:

echo "$DIR_CONTENT" | sed -n 's/.*"path": *"\([^"]*\)",.*"is_dir": *\([^"]*\),.*/\1:\2/p' > $RESPONSE_FILE 

Проблема заключается в том, что я не знаком с sed, если я пытаюсь сделать некоторые изменения Я выиграл Не получается.

Модифицированная линия (понятия не имею, если я двигаюсь в правильном направлении):

echo "$DIR_CONTENT" | sed -n 's/.*"path": *"\([^"]*\)",.*"is_dir": *\([^"]*\),.*"modified": *\([^"]*\),.*/\1:\2\3/p' > $RESPONSE_FILE 

Но в идеале было бы возможно, чтобы получить его, чтобы отобразить измененную информацию и сортировать результаты, основанные на нем?

Также другая часть функции db_list:

 #For each line... 
     while read -r line; do 

      local FILE=${line%:*} 
      FILE=${FILE##*/} 
      local TYPE=${line#*:} 

      if [[ $TYPE == "false" ]]; then 
       echo -ne " [F] $FILE\n" 
      else 
       echo -ne " [D] $FILE\n" 
      fi 
     done < $RESPONSE_FILE 

ответ

1

Две вещи, которые я вижу:

  1. Значение "is_dir" является логическим и не имеет кавычки, так изменить

    "is_dir": *\([^"]*\), 
    

    до

    "is_dir": *\([^,]*\), 
    
  2. «модифицированный» происходит до «пути», так что вы должны написать (с учетом котировок, а):

    echo "$DIR_CONTENT" | sed -n 's/.*"modified": *"\([^"]*\)",.*"path": *"\([^"]*\)",.*"is_dir": *\([^,]*\),.*/\2:\3 \1/p' > $RESPONSE_FILE 
    

Кроме того, Баш имеет удобный «здесь-нить» особенность, так что вам не нужно «эхо»

sed -n '...' <<< "$DIR_CONTENT" > "$RESPONSE_FILE" 
+0

Привет, я очень благодарен за помощь, вроде лучше понимают теперь, как это работает, и что я сделал неправильно, но проверка типа файла возвращает неправильный результат прямо сейчас , Возможно, из-за: "local TYPE = $ {line # *:}" line? – m4gix1

+0

Это [расширение параметра] (http://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion) удалит с начала строки «$ line» до и включит первая толстая кишка. Это то, чего вы хотели достичь? –

+0

Довольно много да, только «if [[$ TYPE ==« false »]], а затем« проверяет списки всех файлов как каталогов, даже если они не являются. Еще не удалось это исправить. – m4gix1

Смежные вопросы