File and Directory Management¶
Module providing easy API for working with remote files and folders.
-
fabric.contrib.files.append(filename, text, use_sudo=False, partial=False, escape=True, shell=False)¶ Append line (or list of lines)
texttofilename, if not present.When a list is given, each line is handled independently, in order.
If
textis already found infilename, the append is not run. Otherwise, the given line is appended to the end of the givenfilenamewithecho '$text' >> $filename. This adds a trailing newline. Do not include a newline intext.The test for whether
textalready exists defaults to a full-line match (^<text>$), or you can specifypartial=Truefor start-of-line matching (^<text>).Because
textis single-quoted, single quotes will be transparently backslash-escaped. This can be disabled withescape=False.If
use_sudois True, will usesudoinstead ofrun.The
shellargument will be eventually passed torun/sudo. See description of the same argument insedfor details.Changed in version 1.4: Updated the regular expression related escaping to try and solve various corner cases.
New in version 1.6: Added the
shellkeyword argument.
-
fabric.contrib.files.comment(filename, regex, use_sudo=False, char='#', backup='.bak', shell=False)¶ Attempt to comment out all lines in
filenamematchingregex.The default commenting character is
#and may be overridden by thecharargument.This function uses the
sedfunction, and will accept the sameuse_sudo,shellandbackupkeyword arguments thatseddoes.commentwill prepend the comment character to the beginning of the line, so that lines end up looking like so:this line is uncommented #this line is commented # this line is indented and commented
In other words, comment characters will not “follow” indentation as they sometimes do when inserted by hand. Neither will they have a trailing space unless you specify e.g.
char='# '.Note
In order to preserve the line being commented out, this function will wrap your
regexargument in parentheses, so you don’t need to. It will ensure that any preceding/trailing^or$characters are correctly moved outside the parentheses. For example, callingcomment(filename, r'^foo$')will result in asedcall with the “before” regex ofr'^(foo)$'(and the “after” regex, naturally, ofr'#\1'.)New in version 1.5: Added the
shellkeyword argument.
-
fabric.contrib.files.contains(filename, text, exact=False, use_sudo=False, escape=True, shell=False, case_sensitive=True)¶ Return True if
filenamecontainstext(which may be a regex.)By default, this function will consider a partial line match (i.e. where
textonly makes up part of the line it’s on). Specifyexact=Trueto change this behavior so that only a line containing exactlytextresults in a True return value.This function leverages
egrepon the remote end (so it may not follow Python regular expression syntax perfectly), and skipsenv.shellwrapper by default.If
use_sudois True, will usesudoinstead ofrun.If
escapeis False, no extra regular expression related escaping is performed (this includes overridingexactso that no^/$is added.)The
shellargument will be eventually passed torun/sudo. See description of the same argument in~fabric.contrib.sedfor details.If
case_sensitiveis False, the-iflag will be passed toegrep.Changed in version 1.4: Updated the regular expression related escaping to try and solve various corner cases.
Changed in version 1.4: Added
escapekeyword argument.New in version 1.6: Added the
shellkeyword argument.New in version 1.11: Added the
case_sensitivekeyword argument.
-
fabric.contrib.files.exists(path, use_sudo=False, verbose=False)¶ Return True if given path exists on the current remote host.
If
use_sudois True, will usesudoinstead ofrun.existswill, by default, hide all output (including the run line, stdout, stderr and any warning resulting from the file not existing) in order to avoid cluttering output. You may specifyverbose=Trueto change this behavior.Changed in version 1.13: Replaced internal use of
test -ewithstatfor improved remote cross-platform (e.g. Windows) compatibility.
-
fabric.contrib.files.first(*args, **kwargs)¶ Given one or more file paths, returns first one found, or None if none exist. May specify
use_sudoandverbosewhich are passed toexists.
-
fabric.contrib.files.is_link(path, use_sudo=False, verbose=False)¶ Return True if the given path is a symlink on the current remote host.
If
use_sudois True, will usesudoinstead ofrun.is_linkwill, by default, hide all output. Giveverbose=Trueto change this.
-
fabric.contrib.files.sed(filename, before, after, limit='', use_sudo=False, backup='.bak', flags='', shell=False)¶ Run a search-and-replace on
filenamewith given regex patterns.Equivalent to
sed -i<backup> -r -e "/<limit>/ s/<before>/<after>/<flags>g" <filename>. Settingbackupto an empty string will, disable backup file creation.For convenience,
beforeandafterwill automatically escape forward slashes, single quotes and parentheses for you, so you don’t need to specify e.g.http:\/\/foo\.com, instead just usinghttp://foo\.comis fine.If
use_sudois True, will usesudoinstead ofrun.The
shellargument will be eventually passed torun/sudo. It defaults to False in order to avoid problems with many nested levels of quotes and backslashes. However, setting it to True may help when using~fabric.operations.cdto wrap explicit or implicitsudocalls. (cdby it’s nature is a shell built-in, not a standalone command, so it should be called within a shell.)Other options may be specified with sed-compatible regex flags – for example, to make the search and replace case insensitive, specify
flags="i". Thegflag is always specified regardless, so you do not need to remember to include it when overriding this parameter.New in version 1.6: Added the
shellkeyword argument.
-
fabric.contrib.files.uncomment(filename, regex, use_sudo=False, char='#', backup='.bak', shell=False)¶ Attempt to uncomment all lines in
filenamematchingregex.The default comment delimiter is
#and may be overridden by thecharargument.This function uses the
sedfunction, and will accept the sameuse_sudo,shellandbackupkeyword arguments thatseddoes.uncommentwill remove a single whitespace character following the comment character, if it exists, but will preserve all preceding whitespace. For example,# foowould becomefoo(the single space is stripped) but `` # foo`` would become `` foo`` (the single space is still stripped, but the preceding 4 spaces are not.)Changed in version 1.6: Added the
shellkeyword argument.
-
fabric.contrib.files.upload_template(filename, destination, context=None, use_jinja=False, template_dir=None, use_sudo=False, backup=True, mirror_local_mode=False, mode=None, pty=None, keep_trailing_newline=False, temp_dir='')¶ Render and upload a template text file to a remote host.
Returns the result of the inner call to
put– see its documentation for details.filenameshould be the path to a text file, which may contain Python string interpolation formatting and will be rendered with the given context dictionarycontext(if given.)Alternately, if
use_jinjais set to True and you have the Jinja2 templating library available, Jinja will be used to render the template instead. Templates will be loaded from the invoking user’s current working directory by default, or fromtemplate_dirif given.The resulting rendered file will be uploaded to the remote file path
destination. If the destination file already exists, it will be renamed with a.bakextension unlessbackup=Falseis specified.By default, the file will be copied to
destinationas the logged-in user; specifyuse_sudo=Trueto usesudoinstead.The
mirror_local_mode,mode, andtemp_dirkwargs are passed directly to an internalputcall; please see its documentation for details on these two options.The
ptykwarg will be passed verbatim to any internalrun/sudocalls, such as those used for testing directory-ness, making backups, etc.The
keep_trailing_newlinekwarg will be passed when creating Jinja2 Environment which is False by default, same as Jinja2’s behaviour.Changed in version 1.9: Added the
ptykwarg.Changed in version 1.11: Added the
keep_trailing_newlinekwarg.Changed in version 1.11: Added the
temp_dirkwarg.