11
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

一括で複数ファイルのシンボリックリンクを作成する方法

Posted at

はじめに

複数のファイルに対して、一括でシンボリックリンクを作成する方法。
親ディレクトリ単位でかけるのが一番手っ取り早いし楽なのですが、最近たまたまその手が使えないケースに遭遇したのでここに書いてみる。

やり方

例として、あるディレクトリ内のtxtファイルのみ頭に「link.」と付けたシンボリックリンクを作成したい場合。
一ファイルずつやるとしたら当然、

1ファイルずつやる場合
$ ln -s test.txt link.test.txt

これで簡単にできます。
ただし、まとめて複数のtxtファイルに一括でシンボリックリンクを張りたい場合、特に意識せずワイルドカード使えばいけるかな?とか何となく思ったりもしますが、

失敗例
$ ln -s *.txt link.*.txt
ln: 宛先の `link.*.txt' はディレクトリではありません

ディレクトリではありませんと怒られます。
そこでlsコマンドでファイル名の末尾が.txtファイルだけ抜き出し、
その結果をxargsで渡してやると無事に一括でのシンボリックリンクの作成が出来ます。

成功例1(lsコマンド使用例)
$ ls *.txt | xargs -I{} ln -s {} link.{}

ちなみにfindコマンドで同じことをやるとこうなる。

成功例2(findコマンド使用例)
$ find *.txt -type f -print | xargs -I{} ln -s {} link.{}

このfindコマンドを使う場合だと、複数のディレクトリの名前にある共通のキーワードが入ってるファイルのシンボリックリンクの作成先を一か所にまとめたりとかできるのかな。試してないけど。

おわりに

ある程度規模の大きい案件とかだと、システム間連携の際に連携元ファイルの出力先と連携先で参照しているパスが違うためにわざわざ手動でコピーする運用になってたり、などというケースも割とあるので、シンボリックリンクを使って楽に出来るところは楽にしましょう、というお話。
勿論ファイル名なりパス名をシステム間で合わせるのが一番楽なのですが、古いシステムとかだと、出力先を変更するのはそれなりにリスクもあったりしますし、中にはハードコーティングされちゃってるケースもあったりするので・・・・・・

11
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?