FileUtils.symlink
# File tmp/rubies/ruby-4.0.0/lib/fileutils.rb, line 707
def ln_s(src, dest, force: nil, relative: false, target_directory: true, noop: nil, verbose: nil)
if relative
return ln_sr(src, dest, force: force, target_directory: target_directory, noop: noop, verbose: verbose)
end
fu_output_message "ln -s#{force ? 'f' : ''}#{
target_directory ? '' : 'T'} #{[src,dest].flatten.join ' '}" if verbose
return if noop
fu_each_src_dest0(src, dest, target_directory) do |s,d|
remove_file d, true if force
File.symlink s, d
end
end
Alias of .ln_s
Creates symbolic links.
Arguments src (a single path or an array of paths) and dest (a single path) should be interpretable as paths.
If src is the path to an existing file:
-
When
destis the path to a non-existent file, creates a symbolic link atdestpointing tosrc:ExampleFileUtils.touch('src0.txt') File.exist?('dest0.txt') # => false FileUtils.ln_s('src0.txt', 'dest0.txt') File.symlink?('dest0.txt') # => true
-
When
destis the path to an existing file, creates a symbolic link atdestpointing tosrcif and only if keyword argumentforce: trueis given (raises an exception otherwise):ExampleFileUtils.touch('src1.txt') FileUtils.touch('dest1.txt') FileUtils.ln_s('src1.txt', 'dest1.txt', force: true) FileTest.symlink?('dest1.txt') # => true FileUtils.ln_s('src1.txt', 'dest1.txt') # Raises Errno::EEXIST.
If dest is the path to a directory, creates a symbolic link at dest/src pointing to src:
FileUtils.touch('src2.txt') FileUtils.mkdir('destdir2') FileUtils.ln_s('src2.txt', 'destdir2') File.symlink?('destdir2/src2.txt') # => true
If src is an array of paths to existing files and dest is a directory, for each child child in src creates a symbolic link dest/child pointing to child:
FileUtils.mkdir('srcdir3') FileUtils.touch('srcdir3/src0.txt') FileUtils.touch('srcdir3/src1.txt') FileUtils.mkdir('destdir3') FileUtils.ln_s(['srcdir3/src0.txt', 'srcdir3/src1.txt'], 'destdir3') File.symlink?('destdir3/src0.txt') # => true File.symlink?('destdir3/src1.txt') # => true
Keyword arguments:
-
force: true- overwritesdestif it exists. -
relative: false- create links relative todest. -
noop: true- does not create links. -
verbose: true- prints an equivalent command:ExampleFileUtils.ln_s('src0.txt', 'dest0.txt', noop: true, verbose: true) FileUtils.ln_s('src1.txt', 'destdir1', noop: true, verbose: true) FileUtils.ln_s('src2.txt', 'dest2.txt', force: true, noop: true, verbose: true) FileUtils.ln_s(['srcdir3/src0.txt', 'srcdir3/src1.txt'], 'destdir3', noop: true, verbose: true)
Output:
ln -s src0.txt dest0.txt ln -s src1.txt destdir1 ln -sf src2.txt dest2.txt ln -s srcdir3/src0.txt srcdir3/src1.txt destdir3
Related: FileUtils.ln_sf.