我正在尝试使用hadoop的 stat
命令从我的hdfs检索文件信息。在linux上,将格式化字符串传递给 stat
(与gnu类似 stat
内置)例如:
$ hdfs dfs -stat "type:%F perm:%a %u:%g size:%b mtime:%y atime:%x name:%n" /file
但我不知道如何让它在windows下工作 cmd
提示:
C:\> hdfs dfs -stat "type:%F" /file
C:\> hdfs dfs -stat "type:%F" /
-stat: java.net.URISyntaxException: Relative path in absolute URI: type:F
...
…它似乎试图将第一个参数解释为路径,而不是第二个参数。所以我想“也许我需要包括字面上的引号?”试图用 ^"
不起作用:
C:\> hdfs dfs -stat "^"type:%F^"" /
-stat: java.net.URISyntaxException: Relative path in absolute URI: ^^type:F
...
…事实上,它看起来像是自动逃脱了 ^
我发过去了,但没有发任何报价。试图用单引号而不是双引号将整个论点括起来也是行不通的:
C:\> hdfs dfs -stat '^"type:%F^"' /
-stat: java.net.URISyntaxException: Relative path in absolute URI: 'type:F'
...
这一次,它包含了单引号,但再次跳过了双引号。双重逃离克拉也不管用:
C:\> hdfs dfs -stat '^^"type:%F^^"' /
-stat: java.net.URISyntaxException: Relative path in absolute URI: 'type:F%5E%5E'
...
三次逃脱克拉产生相同的结果使用一个单一的克拉。
我发现一个笨拙的解决方案是用 %3
,而不是用引号括起来
C:\> hdfs dfs -stat %3%u /
3Andrew.Watsonuu
C:\> hdfs dfs -stat %3%u%g /
3Andrew.Watsonsupergroupgg
…但是您可以看到返回的字符串 3
开始时,最后一个标志字符在结束时加倍 uu
或者 gg
. 我想这是因为 %N
转换为我传递给该函数的参数,如:
C:\> hdfs dfs -stat %0 /
stat: `hadoop': No such file or directory
2019-09-25 12:28:00
C:\> hdfs dfs -stat %1 /
stat: `fs': No such file or directory
2019-09-25 12:28:00
C:\> hdfs dfs -stat "%2" /
-stat: Illegal option -stat
你看得出来 %0
, %1
,和 %2
对应于该命令中的第一个、第二个和第三个标记。所以当我调用%3时,它将第四个参数替换为它自己。这就解释了奇怪的重复的、有问题的输出:
C:\> hdfs dfs -stat %3"repeat" /
3repeat"repeat"repeat
因此,到目前为止,我提出的最佳解决方案是在末尾传递一个多余的参数(这将引发错误),然后在命令的前面引用该参数,如:
C:\> hdfs dfs -stat -R %6 / "%%u %%g %%Y" 2> nul
Andrew.Watson supergroup 1569414480510
Andrew.Watson supergroup 1568728730673
...
Andrew.Watson supergroup 1568103636381
Andrew.Watson supergroup 1568103590659
它在最后抛出那个错误,我通过管道把它隐藏起来 nul
. 一定有更好的办法。有什么想法吗?
暂无答案!
目前还没有任何答案,快来回答吧!