如何将奇怪的路径参数传递给命令

如何将奇怪的路径参数传递给命令

我通过 stdin 发送命令,如何以安全的方式发送路径参数?

例如

stat /some strange/p"at\nh'/

由于奇怪的路径而失败。路径可以存储在变量或其他方式中并使其工作吗?或者有没有一种简单的方法可以在发送这些奇怪的路径之前逃脱它们?

编辑:更清楚地说,奇怪的路径可以包含任何有效的 posix 文件名字符,因此作为处理下面创建的奇怪目录的示例:

mkdir """
'''\n
"

答案1

困难的部分是定义这条奇怪的路径。一旦你在记忆中正确地记住了它,你就可以用它做事了。我将使用此处的文档来获取它,并将其定义为some strange/p"at\nh'/能够在本地操作(/一开始就没有):

$ p="$(cat<<EOF
some strange/p"at\nh'/
EOF
)"
$ echo "$p"
some strange/p"at\nh'/
$ mkdir -p -- "$p"
tomasz@tomasz-laptop-f:~/x$ stat -- "$p"
  File: some strange/p"at\nh'/
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: fe05h/65029d    Inode: 4983105     Links: 2
Access: (0755/drwxr-xr-x)  Uid: ( 1000/  tomasz)   Gid: ( 1000/  tomasz)
Access: 2019-03-06 08:50:05.116674683 +0100
Modify: 2019-03-06 08:50:05.116674683 +0100
Change: 2019-03-06 08:50:05.116674683 +0100
 Birth: -

答案2

如果您没有太多文件,您可以尝试**在循环中展开,并将其传递给stat朋友:

for item in **
do
    stat -- "$item"
    lsattr -- "$item"
done

或者,您可以使用find -print0.这将允许您捕获文件名匹配的选择并以多种不同的方式处理它们:

find . -type f -print0 |
    while read -d $'\0' item
    do
        stat -- "$item"
        lsattr -- "$item"
    done

相关内容