0

メインフォルダーにあるファイルのハードリンクを作成し、次を使用してサブフォルダーに配置するRubyスクリプトを他の誰かが作成しました。

File.link('/mnt/server10/file1.lzo', '/mnt/server10/subfolder10/file2.lzo')

Linuxサーバーに10個の同一のWindowsサーバーの共有がマウントされており、10個のマウントポイントのうち9個で上記のコマンドに問題はありません。ただし、1 つのマウント ポイントで上記のコマンドに問題があり、次のエラーが生成されます。

Hardlink failed: No such file or directory - /mnt/server10/file1.lzo or /mnt/server10/subfolder10/file1.lzo

リンクを手動で作成しても問題ありません。

ln /mnt/server10/file1.lzo  /mnt/server10/subfolder10/file1.lzo

すべての権限と設定は同じです。

ハード リンクを作成する Ruby スクリプトは、すべてのマウント ポイントで同じです。マウント ポイントには、Linux 側と Windows 側で同じ権限があります。

4

1 に答える 1

0

bash の「ln」コマンドは、必要なサブフォルダーを自動的に作成するようです。ruby では自分でやらなければなりません。文字列、ディレクトリ、およびファイル名のパスマップ メソッドを提供する「rake」と呼ばれる優れた gem があります。

ハードリンクを作成する前に、最初にサブディレクトリを作成する必要があります。

require 'rake'
def create_parent_dirs_for(filename)
  mkdir_p filename.pathmap('%d')
end

さらに読んで見る: http://www.virtuouscode.com/2014/04/24/rake-part-4-pathmap/

于 2016-08-17T21:47:18.200 に答える