在 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.txt
file1.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 的建议使用。