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