Introduction

忘備録。
すぐに忘れるから。

やりたいのは

  • find で検索したファイルを xargs に渡してシンボリックリンクを作る

というのもの。

深層学習でデータセットをあるアルゴリズム用に組み替える時、ファイルをコピーするとディスク要領を無駄に消費するので、シンボリックリンクで対応したいことがある。
その時、複数フォルダにファイルが分散しているが、ファイル名が全てユニークであることが分かっている場合、コマンド一つで実行できるから助かる。

How to do?

こんな感じで実行すれば、カレントディレクトリに検索にヒットしたファイルへのシンボリックが一気に作られる。

1
$ find </path/to/find> -iname "*.png" -type f | xargs -I{} ln -s `realpath {}`

肝は

  • ln コマンドでリンク名 (作成されるシンボリックファイル) を省略することで、リンク先のファイル名と同じ名前のリンク名になる
  • realpath コマンドで絶対パスに変換している
    • 正直なくてもいい
  • xargs-I オプションで指定された文字を使って、渡された文字列を展開している
    • 別に文字は何でもいい