通过脚本编辑文件但保留 osx 标签

通过脚本编辑文件但保留 osx 标签

在 OSX 上,您可以使用标签来识别不同类别的文件。以下是在 Finder 中查看时具有不同标签的两个文本文件:

在此输入图像描述

我有大量这样的文件,并且编写了一个 bash 脚本来对这些文件进行多次编辑。所以,例如我这样做:

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

在这种情况下,我获得了所需的文件内容,但丢失了标签:

在此输入图像描述

问题: 如何将原始文件中的标签复制到编辑后的文件中?

答案1

当你运行时> /tmp/foo.txt,你正在覆盖内容的与/tmp/foo.txt的输出sed 's/old text/new text/' file1.txt。由于/tmp/foo.txt运行此命令时该文件不存在,因此 bash 将为您创建该文件,然后写入它。

然后,当您使用-p标志 to时,您将复制tocp的权限和属性并在此过程中覆盖它。/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.txt/tmp/foo.txt反之亦然 - 您正在维护 的现有元数据file1.txt,但修改内容。

在这个特定的实例中,您也可以sed -i按照 pbm 的建议使用。

相关内容