(tr \\n \\0

(tr \\n \\0

문맥:https://stackoverflow.com/a/13941223/15603477
알겠어요xargs chmod 755 <file.txt

더 많은 수의 파일 또는 입력 파일의 거의 모든 행 수의 경우...

chown, chmod, rm, cp -t와 같은 많은 binutils 도구의 경우...

xargs chmod 755 <file.txt

file.txt에 특수 문자 및/또는 여러 줄이 있는 경우.

xargs -0 chmod 755 < <(tr \\n \\0 <file.txt)

(tr \\n \\0 <file.txt)그게 무슨 뜻인지 잘 모르겠어요 ?
존재하다만트라내가 찾은 내용은 다음과 같습니다.

\\     backslash        
\n     new line

  

답변1

\\백슬래시를 의미하지만 여기에는 두 가지 수준의 이스케이프가 있습니다.

먼저, 쉘은 명령줄을 보고 따옴표를 처리합니다 \\n. \n마찬가지로 '\n'or 를 쓸 "\n"수도 있습니다 \n.

그런 다음 그것이 개행 문자를 의미한다고 생각하십시오 tr. \n또한 \\0\0값이 0인 NUL 바이트를 나타냅니다.

아이디어는 경로 이름을 구분하기 위해 개행 문자를 사용하는 입력을 NUL 바이트를 사용하여 경로 이름을 구분하는 입력으로 변환하는 것입니다. NUL은 경로 이름에서 유일하게 유효하지 않은 문자이기 때문에 자연스러운 구분 기호이며 입력에 대한 다른 특수 처리를 수행하지 -0못하게 하는 옵션이기도 합니다. 따옴표는 기본적으로 처리됩니다(자체 방식으로, NUL과 완전히 호환되지는 않음). 쉘의 인용 규칙), 모든 공백을 구분 기호로 처리합니다. plain 을 사용하지 않는 것이 가장 좋습니다 .xargsxargsxargs

이것-0개행 문자, 하지만 공백과 따옴표를 포함하여 다른 모든 것을 표현할 수 있습니다.


이것을 <(...)프로세스 대체라고 하며, 명령의 출력을 파일처럼 읽을 수 있도록 제공합니다. 이는 파이프를 대신 사용할 수 있는 파이프의 일반화입니다.

난 쓸수있다

xargs -0 chmod 755 < <(tr \\n \\0 <file.txt)

~처럼

tr '\n' '\0' <file.txt | xargs -0 chmod 755

(다시, \\n= '\n')

답변2

tr \\n \\0\n내용이 줄 구분 기호 역할 을 하는 null 종료 문자열로 입력으로 전달될 수 \0있도록 (개행) 문자를 NUL 문자로 바꿉니다 . 입력이 공백과 줄 바꿈으로 구분되어 공백을 포함하면 작동하지 않을 것으로 예상되지 않습니다 .file.txtxargs -0\0-0 xargsfile.txt

관련 정보