我通过 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