web-dev-qa-db-ja.com

スクリプトを介してファイルを編集しますが、osxタグは維持します

OSXでは、さまざまなカテゴリのファイルを識別できるタグを付けることができます。 Finderで表示したときにタグが異なる2つのテキストファイルを次に示します。

enter image description here

私はこれらのファイルを多数持っており、これらのファイルをいくつか編集するためのbashスクリプトを作成しました。だから、例えば私はします:

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

その場合、目的のファイルコンテンツを取得しますが、タグを失います。

enter image description here

質問:タグを元のファイルから編集したファイルにコピーするにはどうすればよいですか?

3
Peter Grill

> /tmp/foo.txtを実行すると、/tmp/foo.txtの-​​contentssed 's/old text/new text/' file1.txtの出力で上書きされます。このコマンドを実行すると/tmp/foo.txtが存在しないため、bashはそのファイルを作成してから書き込みます。

次に、-pフラグをcpに使用すると、/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の既存のメタデータを維持しますが、コンテンツを変更します。

この特定の例では、pbmが提案したようにsed -iを使用することもできます。

4
rmelcer