0

有谁熟悉 Dropbox Uploader ( https://github.com/andreafabrizi/Dropbox-Uploader ) 或 UNIXsed命令。

我想让这个脚本工作,所以它会根据修改日期从保管箱返回一个排序列表。

命令./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
4

1 回答 1

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
    

此外,bash 有一个方便的“here-string”功能,所以你不需要“echo”

sed -n '...' <<< "$DIR_CONTENT" > "$RESPONSE_FILE"
于 2013-11-07T21:22:15.437 回答