如何从 zfs diff 输出解密八进制编码?

如何从 zfs diff 输出解密八进制编码?

zfs diff\xxxx用(八进制编码)替换文件名中的某些字符。我可以使用awksed任何其他常用实用程序将其解密吗(无需使用 perl 或 python 脚本)?zfs diff可以按如下方式创建示例输出:

echo '+ F /dir/my\0040file' > listing

我的问题是,我可以解密listing得到

+ F /dir/my file

代替

+ F /dir/my\0040file

(我的最终目标是将其重新输入ls -l以获取文件大小。)

答案1

自以下日期起使用 GNU awk strtonum()

$ echo '+ F /dir/my\0040file' | 
awk '{
    while(match($0,/\\0[0-9]{3}/)) {               # find \nnnn 
        c=strtonum(substr($0,RSTART+1,RLENGTH-1))  # extract the nnnn
        printf "%s%c",substr($0,1,RSTART-1),c      # output
        $0=substr($0,RSTART+RLENGTH)               # prepare for next round
    }
    print $0
}'

输出:

+ F /dir/my file

几乎仅对您的样本进行测试。

答案2

这可能对你有用(GNU sed 和 dash):

sed 's/.*/echo "&"/e' file

注意:我使用的版本使用指向 dash 的 /bin/sh 评估替换命令的 RHS。dashecho中的命令转换\0nnn为其八进制表示形式。

相关内容