명령에 이상한 경로 매개변수를 전달하는 방법

명령에 이상한 경로 매개변수를 전달하는 방법

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

관련 정보