file.n
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:19k
- '"
- '" Copyright (c) 1993 The Regents of the University of California.
- '" Copyright (c) 1994-1996 Sun Microsystems, Inc.
- '"
- '" See the file "license.terms" for information on usage and redistribution
- '" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- '"
- '" RCS: @(#) $Id: file.n,v 1.23.2.3 2006/12/04 09:12:02 dkf Exp $
- '"
- .so man.macros
- .TH file n 8.3 Tcl "Tcl Built-In Commands"
- .BS
- '" Note: do not modify the .SH NAME line immediately below!
- .SH NAME
- file - Manipulate file names and attributes
- .SH SYNOPSIS
- fBfile fIoptionfR fInamefR ?fIarg arg ...fR?
- .BE
- .SH DESCRIPTION
- .PP
- This command provides several operations on a file's name or attributes.
- fINamefR is the name of a file; if it starts with a tilde, then tilde
- substitution is done before executing the command (see the manual entry for
- fBfilenamefR for details). fIOptionfR indicates what to do with the
- file name. Any unique abbreviation for fIoptionfR is acceptable. The
- valid options are:
- .TP
- fBfile atime fInamefR ?fBtimefR?
- .
- Returns a decimal string giving the time at which file fInamefR was last
- accessed. If fItimefR is specified, it is an access time to set
- for the file. The time is measured in the standard POSIX fashion as
- seconds from a fixed starting time (often January 1, 1970). If the file
- doesn't exist or its access time cannot be queried or set then an error is
- generated. On Windows, FAT file systems do not support access time.
- .TP
- fBfile attributes fInamefR
- .TP
- fBfile attributes fInamefR ?fBoptionfR?
- .TP
- fBfile attributes fInamefR ?fBoption value option value...fR?
- .RS
- This subcommand returns or sets platform specific values associated
- with a file. The first form returns a list of the platform specific
- flags and their values. The second form returns the value for the
- specific option. The third form sets one or more of the values. The
- values are as follows:
- .PP
- On Unix, fB-groupfR gets or sets the group name for the file. A group id
- can be given to the command, but it returns a group name. fB-ownerfR gets
- or sets the user name of the owner of the file. The command returns the
- owner name, but the numerical id can be passed when setting the
- owner. fB-permissionsfR sets or retrieves the octal code that chmod(1)
- uses. This command does also has limited support for setting using the
- symbolic attributes for chmod(1), of the form [ugo]?[[+-=][rwxst],[...]],
- where multiple symbolic attributes can be separated by commas (example:
- fBu+s,go-rwfR add sticky bit for user, remove read and write
- permissions for group and other). A simplified fBlsfR style string,
- of the form rwxrwxrwx (must be 9 characters), is also supported
- (example: fBrwxr-xr-tfR is equivalent to 01755).
- .PP
- On Windows, fB-archivefR gives the value or sets or clears the
- archive attribute of the file. fB-hiddenfR gives the value or sets
- or clears the hidden attribute of the file. fB-longnamefR will
- expand each path element to its long version. This attribute cannot be
- set. fB-readonlyfR gives the value or sets or clears the readonly
- attribute of the file. fB-shortnamefR gives a string where every
- path element is replaced with its short (8.3) version of the
- name. This attribute cannot be set. fB-systemfR gives or sets or
- clears the value of the system attribute of the file.
- .PP
- On Macintosh, fB-creatorfR gives or sets the Finder creator type of
- the file. fB-hiddenfR gives or sets or clears the hidden attribute
- of the file. fB-readonlyfR gives or sets or clears the readonly
- attribute of the file. Note that directories can only be locked if
- File Sharing is turned on. fB-typefR gives or sets the Finder file
- type for the file.
- .RE
- .VS
- .TP
- fBfile channels ?fIpatternfR?
- .
- If fIpatternfR isn't specified, returns a list of names of all
- registered open channels in this interpreter. If fIpatternfR is
- specified, only those names matching fIpatternfR are returned. Matching
- is determined using the same rules as for fBstring matchfR.
- .VE
- .TP
- fBfile copy fR?fB-forcefR? ?fB-|-fR? fIsourcefR fItargetfR
- .TP
- fBfile copy fR?fB-forcefR? ?fB-|-fR? fIsourcefR ?fIsourcefR ...? fItargetDirfR
- .RS
- The first form makes a copy of the file or directory fIsourcefR under
- the pathname fItargetfR. If fItargetfR is an existing directory,
- then the second form is used. The second form makes a copy inside
- fItargetDirfR of each fIsourcefR file listed. If a directory is
- specified as a fIsourcefR, then the contents of the directory will be
- recursively copied into fItargetDirfR. Existing files will not be
- overwritten unless the fB-forcefR option is specified. When copying
- within a single filesystem, fIfile copyfR will copy soft links (i.e.
- the links themselves are copied, not the things they point to). Trying
- to overwrite a non-empty directory, overwrite a directory with a file,
- or overwrite a file with a directory will all result in errors even if
- fI-forcefR was specified. Arguments are processed in the order
- specified, halting at the first error, if any. A fB-|-fR marks
- the end of switches; the argument following the fB-|-fR will be
- treated as a fIsourcefR even if it starts with a fB-fR.
- .RE
- .TP
- fBfile delete fR?fB-forcefR? ?fB-|-fR? fIpathnamefR ?fIpathnamefR ... ?
- .
- Removes the file or directory specified by each fIpathnamefR
- argument. Non-empty directories will be removed only if the
- fB-forcefR option is specified. When operating on symbolic links,
- the links themselves will be deleted, not the objects they point to.
- Trying to delete a non-existent file is not considered an error.
- Trying to delete a read-only file will cause the file to be deleted,
- even if the fB-forcefR flags is not specified. If the fB-forcefR
- option is specified on a directory, Tcl will attempt both to change
- permissions and move the current directory 'pwd' out of the given path
- if that is necessary to allow the deletion to proceed. Arguments are
- processed in the order specified, halting at the first error, if any.
- A fB-|-fR marks the end of switches; the argument following the
- fB-|-fR will be treated as a fIpathnamefR even if it starts with
- a fB-fR.
- .TP
- fBfile dirname fInamefR
- Returns a name comprised of all of the path components in fInamefR
- excluding the last element. If fInamefR is a relative file name and
- only contains one path element, then returns ``fB.fR'' (or ``fB:fR''
- on the Macintosh). If fInamefR refers to a root directory, then the
- root directory is returned. For example,
- .RS
- .CS
- fBfile dirname c:/fR
- .CE
- returns fBc:/fR.
- .PP
- Note that tilde substitution will only be
- performed if it is necessary to complete the command. For example,
- .CS
- fBfile dirname ~/src/foo.cfR
- .CE
- returns fB~/srcfR, whereas
- .CS
- fBfile dirname ~fR
- .CE
- returns fB/homefR (or something similar).
- .RE
- .TP
- fBfile executable fInamefR
- .
- Returns fB1fR if file fInamefR is executable by the current user,
- fB0fR otherwise.
- .TP
- fBfile exists fInamefR
- .
- Returns fB1fR if file fInamefR exists and the current user has
- search privileges for the directories leading to it, fB0fR otherwise.
- .TP
- fBfile extension fInamefR
- .
- Returns all of the characters in fInamefR after and including the last
- dot in the last element of fInamefR. If there is no dot in the last
- element of fInamefR then returns the empty string.
- .TP
- fBfile isdirectory fInamefR
- .
- Returns fB1fR if file fInamefR is a directory, fB0fR otherwise.
- .TP
- fBfile isfile fInamefR
- .
- Returns fB1fR if file fInamefR is a regular file, fB0fR otherwise.
- .TP
- fBfile join fInamefR ?fIname ...fR?
- .
- Takes one or more file names and combines them, using the correct path
- separator for the current platform. If a particular fInamefR is
- relative, then it will be joined to the previous file name argument.
- Otherwise, any earlier arguments will be discarded, and joining will
- proceed from the current argument. For example,
- .RS
- .CS
- fBfile join a b /foo barfR
- .CE
- returns fB/foo/barfR.
- .PP
- Note that any of the names can contain separators, and that the result
- is always canonical for the current platform: fB/fR for Unix and
- Windows, and fB:fR for Macintosh.
- .RE
- .TP
- fBfile link ?fI-linktypefR? fIlinkNamefR ?fItargetfR?
- .
- If only one argument is given, that argument is assumed to be
- fIlinkNamefR, and this command returns the value of the link given by
- fIlinkNamefR (i.e. the name of the file it points to). If
- fIlinkNamefR isn't a link or its value cannot be read (as, for example,
- seems to be the case with hard links, which look just like ordinary
- files), then an error is returned.
- .
- If 2 arguments are given, then these are assumed to be fIlinkNamefR
- and fItargetfR. If fIlinkNamefR already exists, or if fItargetfR
- doesn't exist, an error will be returned. Otherwise, Tcl creates a new
- link called fIlinkNamefR which points to the existing filesystem object
- at fItargetfR, where the type of the link is platform-specific (on Unix
- a symbolic link will be the default). This is useful for the case where
- the user wishes to create a link in a cross-platform way, and doesn't
- care what type of link is created.
- .
- If the user wishes to make a link of a specific type only, (and signal an
- error if for some reason that is not possible), then the optional
- fI-linktypefR argument should be given. Accepted values for
- fI-linktypefR are "-symbolic" and "-hard".
- .
- When creating links on filesystems that either do not support any links,
- or do not support the specific type requested, an error message will be
- returned. In particular Windows 95, 98 and ME do not support any links
- at present, but most Unix platforms support both symbolic and hard links
- (the latter for files only), MacOS supports symbolic links and Windows
- NT/2000/XP (on NTFS drives) support symbolic directory links and hard
- file links.
- .TP
- fBfile lstat fIname varNamefR
- .
- Same as fBstatfR option (see below) except uses the fIlstatfR
- kernel call instead of fIstatfR. This means that if fInamefR
- refers to a symbolic link the information returned in fIvarNamefR
- is for the link rather than the file it refers to. On systems that
- don't support symbolic links this option behaves exactly the same
- as the fBstatfR option.
- .TP
- fBfile mkdir fIdirfR ?fIdirfR ...?
- .
- Creates each directory specified. For each pathname fIdirfR specified,
- this command will create all non-existing parent directories as
- well as fIdirfR itself. If an existing directory is specified, then
- no action is taken and no error is returned. Trying to overwrite an existing
- file with a directory will result in an error. Arguments are processed in
- the order specified, halting at the first error, if any.
- .TP
- fBfile mtime fInamefR ?fItimefR?
- .
- Returns a decimal string giving the time at which file fInamefR was last
- modified. If fItimefR is specified, it is a modification time to set for
- the file (equivalent to Unix fBtouchfR). The time is measured in the
- standard POSIX fashion as seconds from a fixed starting time (often January
- 1, 1970). If the file doesn't exist or its modified time cannot be queried
- or set then an error is generated.
- .TP
- fBfile nativename fInamefR
- .
- Returns the platform-specific name of the file. This is useful if the
- filename is needed to pass to a platform-specific call, such as exec
- under Windows or AppleScript on the Macintosh.
- .TP
- fBfile normalize fInamefR
- .
- .RS
- Returns a unique normalized path representation for the file-system
- object (file, directory, link, etc), whose string value can be used as a
- unique identifier for it. A normalized path is an absolute path which has
- all '../', './' removed. Also it is one which is in the ``standard''
- format for the native platform. On MacOS, Unix, this means the segments
- leading up to the path must be free of symbolic links/aliases (but the
- very last path component may be a symbolic link), and on Windows it also
- means we want the long form with that form's case-dependence (which
- gives us a unique, case-dependent path). The one exception concerning the
- last link in the path is necessary, because Tcl or the user may wish to
- operate on the actual symbolic link itself (for example 'file delete', 'file
- rename', 'file copy' are defined to operate on symbolic links, not on the
- things that they point to).
- .RE
- .TP
- fBfile owned fInamefR
- .
- Returns fB1fR if file fInamefR is owned by the current user, fB0fR
- otherwise.
- .TP
- fBfile pathtype fInamefR
- .
- Returns one of fBabsolutefR, fBrelativefR, fBvolumerelativefR. If
- fInamefR refers to a specific file on a specific volume, the path type
- will be fBabsolutefR. If fInamefR refers to a file relative to the
- current working directory, then the path type will be fBrelativefR. If
- fInamefR refers to a file relative to the current working directory on
- a specified volume, or to a specific file on the current working volume, then
- the path type is fBvolumerelativefR.
- .TP
- fBfile readable fInamefR
- .
- Returns fB1fR if file fInamefR is readable by the current user,
- fB0fR otherwise.
- .TP
- fBfile readlink fInamefR
- .
- Returns the value of the symbolic link given by fInamefR (i.e. the name
- of the file it points to). If fInamefR isn't a symbolic link or its
- value cannot be read, then an error is returned. On systems that don't
- support symbolic links this option is undefined.
- .TP
- fBfile rename fR?fB-forcefR? ?fB-|-fR? fIsourcefR fItargetfR
- .TP
- fBfile rename fR?fB-forcefR? ?fB-|-fR? fIsourcefR ?fIsourcefR ...? fItargetDirfR
- .RS
- The first form takes the file or directory specified by pathname
- fIsourcefR and renames it to fItargetfR, moving the file if the
- pathname fItargetfR specifies a name in a different directory. If
- fItargetfR is an existing directory, then the second form is used.
- The second form moves each fIsourcefR file or directory into the
- directory fItargetDirfR. Existing files will not be overwritten
- unless the fB-forcefR option is specified. When operating inside a
- single filesystem, Tcl will rename symbolic links rather than the
- things that they point to. Trying to overwrite a non-empty directory,
- overwrite a directory with a file, or a file with a directory will all
- result in errors. Arguments are processed in the order specified,
- halting at the first error, if any. A fB-|-fR marks the end of
- switches; the argument following the fB-|-fR will be treated as a
- fIsourcefR even if it starts with a fB-fR.
- .RE
- .TP
- fBfile rootname fInamefR
- .
- Returns all of the characters in fInamefR up to but not including the
- last ``.'' character in the last component of name. If the last
- component of fInamefR doesn't contain a dot, then returns fInamefR.
- .TP
- fBfile separatorfR ?fInamefR?
- .
- If no argument is given, returns the character which is used to separate
- path segments for native files on this platform. If a path is given,
- the filesystem responsible for that path is asked to return its
- separator character. If no file system accepts fInamefR, an error
- is generated.
- .TP
- fBfile size fInamefR
- .
- Returns a decimal string giving the size of file fInamefR in bytes. If
- the file doesn't exist or its size cannot be queried then an error is
- generated.
- .TP
- fBfile split fInamefR
- .
- Returns a list whose elements are the path components in fInamefR. The
- first element of the list will have the same path type as fInamefR.
- All other elements will be relative. Path separators will be discarded
- unless they are needed ensure that an element is unambiguously relative.
- For example, under Unix
- .RS
- .CS
- file split /foo/~bar/baz
- .CE
- returns fB/ foo ./~bar bazfR to ensure that later commands
- that use the third component do not attempt to perform tilde
- substitution.
- .RE
- .TP
- fBfile stat fIname varNamefR
- .
- Invokes the fBstatfR kernel call on fInamefR, and uses the variable
- given by fIvarNamefR to hold information returned from the kernel call.
- fIVarNamefR is treated as an array variable, and the following elements
- of that variable are set: fBatimefR, fBctimefR, fBdevfR, fBgidfR,
- fBinofR, fBmodefR, fBmtimefR, fBnlinkfR, fBsizefR, fBtypefR,
- fBuidfR. Each element except fBtypefR is a decimal string with the
- value of the corresponding field from the fBstatfR return structure;
- see the manual entry for fBstatfR for details on the meanings of the
- values. The fBtypefR element gives the type of the file in the same
- form returned by the command fBfile typefR. This command returns an
- empty string.
- .TP
- fBfile system fInamefR
- .
- Returns a list of two elements, the first of which is the name of the
- filesystem to use for the file, and the second an arbitrary string
- representing the filesystem-specific nature or type of the location
- within that filesystem. If a filesystem only supports one type of file,
- the second element may be null. For example the native files have a
- first element 'native', and a second element which is a platform-specific
- type name for the file's system (e.g. 'NTFS', 'FAT', etc), or possibly
- the empty string if no further information is available or if this
- is not implemented. A generic virtual file system might return the
- list 'vfs ftp' to represent a file on a remote ftp site mounted as a
- virtual filesystem through an extension called 'vfs'. If the file does
- not belong to any filesystem, an error is generated.
- .TP
- fBfile tail fInamefR
- .
- Returns all of the characters in fInamefR after the last directory
- separator. If fInamefR contains no separators then returns
- fInamefR.
- .TP
- fBfile type fInamefR
- .
- Returns a string giving the type of file fInamefR, which will be one of
- fBfilefR, fBdirectoryfR, fBcharacterSpecialfR, fBblockSpecialfR,
- fBfifofR, fBlinkfR, or fBsocketfR.
- .TP
- fBfile volumesfR
- .
- Returns the absolute paths to the volumes mounted on the system, as a
- proper Tcl list. On the Macintosh, this will be a list of the mounted
- drives, both local and network. N.B. if two drives have the same name,
- they will both appear on the volume list, but there is currently no way,
- from Tcl, to access any but the first of these drives. On UNIX, the
- command will always return "/", since all filesystems are locally mounted.
- On Windows, it will return a list of the available local drives
- (e.g. {a:/ c:/}).
- .TP
- fBfile writable fInamefR
- .
- Returns fB1fR if file fInamefR is writable by the current user,
- fB0fR otherwise.
- .SH "PORTABILITY ISSUES"
- .TP
- fBUnixfR
- .
- These commands always operate using the real user and group identifiers,
- not the effective ones.
- .SH EXAMPLES
- This procedure shows how to search for C files in a given directory
- that have a correspondingly-named object file in the current
- directory:
- .CS
- proc findMatchingCFiles {dir} {
- set files {}
- switch $::tcl_platform(platform) {
- windows {
- set ext .obj
- }
- unix {
- set ext .o
- }
- }
- foreach file [glob -nocomplain -directory $dir *.c] {
- set objectFile [fBfile tailfR [fBfile rootnamefR $file]]$ext
- if {[fBfile existsfR $objectFile]} {
- lappend files $file
- }
- }
- return $files
- }
- .CE
- .PP
- Rename a file and leave a symbolic link pointing from the old location
- to the new place:
- .CS
- set oldName foobar.txt
- set newName foo/bar.txt
- # Make sure that where we're going to move to exists...
- if {![fBfile isdirectoryfR [fBfile dirnamefR $newName]]} {
- fBfile mkdirfR [fBfile dirnamefR $newName]
- }
- fBfile renamefR $oldName $newName
- fBfile linkfR -symbolic $oldName $newName
- .CE
- .SH "SEE ALSO"
- filename(n), open(n), close(n), eof(n), gets(n), tell(n), seek(n),
- fblocked(n), flush(n)
- .SH KEYWORDS
- attributes, copy files, delete files, directory, file, move files, name, rename files, stat