Shell-Script

通過腳本編輯文件但維護 osx 標籤

  • March 2, 2015

在 OSX 上,您可以使用標籤來辨識不同類別的文件。以下是在 Finder 中查看時具有不同標籤的兩個文本文件:

在此處輸入圖像描述

我有大量這些文件,並編寫了一個 bash 腳本來對這些文件進行多次編輯。所以,例如我這樣做:

$ sed 's/old text/new text/' file1.txt > /tmp/foo.txt
$ cp -p /tmp/foo.txt file1.txt

在這種情況下,我得到了所需的文件內容但失去了標籤:

在此處輸入圖像描述

問題:如何將標籤從原始文件複製到編輯後的文件中?

執行時> /tmp/foo.txt,您將使用的輸出覆蓋 的內容。由於在您執行此命令時不存在,因此 bash 將為您創建該文件,然後將其寫入。/tmp/foo.txt``sed 's/old text/new text/' file1.txt``/tmp/foo.txt

然後,當您使用-p標誌 to 時cp,您正在複製 to 的權限和屬性/tmp/foo.txtfile1.txt在此過程中覆蓋它。

相反,您要做的是用 的內容覆蓋 的內容file1.txt/tmp/foo.txt這聽起來應該很熟悉。跑

sed 's/old text/new text/' file1.txt > /tmp/foo.txt
cat /tmp/foo.txt > file1.txt

請注意,這不會從file1.txtto複製任何權限或屬性,/tmp/foo.txt反之亦然 - 您正在維護 的現有元數據file1.txt,但正在修改內容。

在這種特定情況下,您也可以sed -i按照 pbm 的建議使用。

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