FileUtils docでオプションを維持する効果が何のfileutils :: CPメソッド
オプションパラメータがリストから取られたオプションのハッシュ、と言います。 noopは変更がないことを意味します。他の2つは明らかです。
しかし、私は:preserve
オプションの効果を理解していません。 cp
メソッドでは、このオプションがtrueの場合は、copy_metadata
メソッドを呼び出します。それは何をするでしょうか?
FileUtils docでオプションを維持する効果が何のfileutils :: CPメソッド
オプションパラメータがリストから取られたオプションのハッシュ、と言います。 noopは変更がないことを意味します。他の2つは明らかです。
しかし、私は:preserve
オプションの効果を理解していません。 cp
メソッドでは、このオプションがtrueの場合は、copy_metadata
メソッドを呼び出します。それは何をするでしょうか?
cp
メソッドから呼び出されcopy_entry
のコメントによれば、真である+を保存+場合
https://github.com/ruby/ruby/blob/v2_3_1/lib/fileutils.rb#L452
、この方法は、所有者、グループ、および 変更時刻を保存します。パーミッションは+ preserve +に関係なくコピーされます。
copy_entry
から呼び出され
そして実際にcopy_metadata
は、コピー元ファイルからuid
、gid
、atime
、mtime
を取得するlstat
を呼び出し、そしてFile.chown
とFile.utime
を使用して宛先をコピーし、それをアプリングています。
https://github.com/ruby/ruby/blob/v2_3_1/lib/fileutils.rb#L1399
def copy_metadata(path)
st = lstat()
if !st.symlink?
File.utime st.atime, st.mtime, path
end
begin
if st.symlink?
begin
File.lchown st.uid, st.gid, path
rescue NotImplementedError
end
else
File.chown st.uid, st.gid, path
end
rescue Errno::EPERM
# clear setuid/setgid
... omitted ...
end
end
ドキュメントが完全ではありませんので、それは少し紛らわしいです。実際には 'copy_entry'メソッドの上にあるドキュメントは' copy_metadata'メソッドに適用できます。 – niaomingjian