Bash

(tr n 0 <file.txt) 是什麼意思?

  • December 22, 2021

上下文:https
://stackoverflow.com/a/13941223/15603477 我明白xargs chmod 755 &lt;file.txt

對於更大數量的文件,或輸入文件中幾乎任意數量的行…

對於許多 binutils 工具,如 chown、chmod、rm、cp -t …

xargs chmod 755 &lt;file.txt

如果您在 file.txt 中有特殊字元和/或很多行。

xargs -0 chmod 755 &lt; &lt;(tr \\n \\0 &lt;file.txt)

我不確定(tr \\n \\0 &lt;file.txt)是什麼意思?

man tr中,我發現以下內容:

\\     backslash        
\n     new line

 

\\表示反斜杠,但這裡有兩個轉義級別。

首先,shell 查看命令行並處理引號,這裡\\n變成\n. 同樣,一個人可以寫,'\n'或者"\n",他們也會產生\n

然後,tr看到\n並認為它意味著換行符。類似地\\0轉向\0,這意味著 NUL 字節,即數值為零的字節。

想法是將輸入從使用換行符分隔路徑名的輸入轉換為使用 NUL 字節分隔它們的輸入。NUL 是一個自然分隔符,因為它是唯一在路徑名中無效的字元,也是阻止它對輸入進行其他特殊處理的-0選項:預設情況下處理引號(以它自己的方式,與 shell 的引用規則不完全兼容),並且將任何空格視為分隔符。最好不要使用 plain 。xargs``xargs``xargs

然而,該-0選項不是標準的,但得到了相對廣泛的支持。此外,通過這樣的轉換,您仍然無法表示包含換行符的文件名,但您可以表示其他所有內容,包括空格和引號。


這個&lt;(...)東西叫做程序替換,它提供了一個命令的輸出,就像它是一個文件一樣讀取。這是管道的一種概括,在這裡,可以用一個來代替。

我會寫

xargs -0 chmod 755 &lt; &lt;(tr \\n \\0 &lt;file.txt)

作為

tr '\n' '\0' &lt;file.txt | xargs -0 chmod 755

(再次,\\n= '\n'

引用自:https://unix.stackexchange.com/questions/683485