file(3tcl)

NAME
file - 操纵文件名和属性

总览 SYNOPSIS
file option name ?arg arg ...?

描述 DESCRIPTION

这个命令提供在一个文件名或属性上的一些操作。Name 是一个文件的名字；如果它以波浪线(~)开始，则在执行命令之前进行波浪线替换(详情参见filename 命令的手册条目)。Option 指示对文件名做什么处理。接受 option 的任何唯一的缩写。有效的选项是:

file atime name ?time?
    返回一个十进制字符串，给出文件 name 上次被访问的时间。如果指定了time，它是这个文件要设置成的访问时间。这个时间是用标准的 POSIX 方式(fashion)度量的，即从一个固定的开始时间至今的秒数(通常是1970年1月1日)。如果文件不存在或它的访问时间不可查询或设置则生成一个错误。在 Windows 上，FAT 文件系统不支持访问时间。

file attributes name
    file attributes name ?option?
    file attributes name ?option value option value...?
    这个子命令返回或设置与一个文件相关联的特定于平台的值。第一种形式返回特定于平台的标志(flag)和它们的值的一个列表。第二种形式返回指定选项的值。第三种形式设置一个或多个值。这些值是:

    在Unix 上，-group 得到或设置这个文件的组名字。给这个命令一个组ID，而它返回一个组名字。-owner 得到或设置这个文件的属主的名字。这个命令返回属主的名字，而在设置属主的时候要传递给它数值的 ID。-permissions 设置或查询 chmod(1) 所使用的八进制代码。这个命令还有限的支持使用 chmod(1)的符号属性来做设置，形式是 [ugo]?[[+-=][rwxst],[...]]，这里使用逗号来分隔多个符号属性(例如: u+s，go-rw 为用户添加粘住位(sticky)，为组和其他删除读和写的许可权)。还支持一个简化的 ls式样的字符串，形式是 rwxrwxrwx (必须是 9 个字符)(例如: rwxr-xr-t 等价于01755)。

    在 Windows 上，-archive 给出值或设置或清除这个文件的归档属性。-hidden 给出值或设置或清除这个文件的隐藏属性。-longname将把每个路径元素扩展成长版本。不能设置这个属性。-readonly 给出值或设置或清除这个文件的只读属性。-shortname 给出一个字符串，在这里每个路径元素被替换成它的短(8.3)版本的文件名。不能设置这个属性。-system 给出值或设置或清除这个文件的系统属性。

    在 Macintosh 上，-creator给出或设置这个文件的寻找器(Finder)建立者类型。-hidden给出值或设置或清除这个文件的隐藏属性。-readonly 给出值或设置或清除这个文件的只读属性。注意如果打开了文件共享则目录只能被锁定。-type 给出或设置这个文件的寻找器文件类型。

file channels ?pattern?
    如果没有指定 pattern，则返回所有在这个解释器中注册的打开通道的一个列表。如果指定了 pattern，则只返回匹配pattern 的名字。确定匹配使用与 string match 相同的规则。

file copy ?-force? ?--? source target
    file copy ?-force? ?--? source ?source ...? targetDir
    第一中形式在路径名 target 底下做文件或路径 source的一个复件。如果 target 是一个现存的目录，则使用第二种形式。第二种形式在targetDir 中做列出的每个 source 文件的一个复件。如果指定一个目录作为一个 source，则这个目录的内容将被递归的复制进 targetDir 中。除非指定 -force 选项否则现存文件将不被覆写。即使指定了 -force ，尝试覆写一个非空目录，用一个文件覆写一个目录，或者用一个目录覆写一个文件将导致错误。参数按指定的次序被处理，如果有错误的话，在第一个错误处停止(halt)。一个 -- 标记选项的结束；在 -- 之后的参数即使以 - 开始将仍被作为一个 source 来对待。

file delete ?-force? ?--? pathname ?pathname ... ?
    删除由每个 pathname 参数所指定的文件或目录。只有指定 -force选项才删除非空目录。尝试删除一个不存在文件将导致不作为一个错误来考虑。即使没有指定 -force 项，尝试删除一个只读文件将导致文件被删除。参数按指定的次序被处理，如果有错误的话，在第一个错误处停止(halt)。一个 -- 标记选项的结束；在 -- 之后的参数即使以 - 开始将仍被作为一个 pathname来对待。

file dirname name
    返回一个名字，由在 name 中除了最后一个之外的所有路径组成部分(component)组成。如果 name 是一个相对的文件名并且只包含一个路径元素(element)，则返回“.” (在 Macintosh 上为“:”)。如果 name 参照一个根目录，则返回根目录。例如，
    file dirname c:/ 返回 c:/.

    注意波浪线替换只在必要的时候进行用以补全(complete)命令。例如， file dirname ~/src/foo.c 返回 ~/src，而 file dirname ~ 返回 /home (or something similar).

file executable name
    如果文件对当前用户是可执行的则返回 1，否则返回0。

file exists name
    如果文件 name 存在并且当前的用户对找到(lead to)它(所途径)的目录有查找的权利(privilege)则返回1，否则返回 0。

file extension name
    返回在 name 最后那个元素的最后一个点号之后并包括点号的所有在 name中字符。如果在 name 的最后的那个元素中没有点号则返回空串。

file isdirectory name
    如果文件 name 是一个目录则返回 1，否则返回 0。

file isfile name
    如果文件 name 是一个普通文件则返回 1，否则返回 0。

file join name ?name ...?
    接受一个或多个文件名并使用对当前平台正确的路径分隔符来组合它们。如果特定的 name是相对的，则它会被连接到前面的文件名参数上。否则，丢弃所有以前的参数，从当前的参数开始进行连接。例如
    file join a b /foo bar 返回 /foo/bar.

    注意任何名字都可以包含分隔符，并且结果总是依从当前平台的规矩: 对 Unix 和 Windows 是 /，对 Macintosh 是 :。

file lstat name varName
    除了使用 lstat 调用而不使用 stat 之外，与 stat 选项(见后)相同。这意味着如果 name 参照一个符号连接，在 varName 中返回的信息是针对这个连接而不是它所引用的那个文件。在不支持符号连接的系统上这个选项的行为与 stat选项完全一致。

file mkdir dir ?dir ...?
    建立每个指定的目录。对于每个指定的路径名 dir ，象 dir 自身一样，这个命令将建立所有不存在的父目录。如果指定了一个现存的目录，不做动作并不返回错误。尝试用一个目录覆写一个现存的文件将导致一个错误。参数按指定的次序被处理，如果有错误的话，在第一个错误处停止(halt)。

file mtime name ?time?
    返回一个十进制字符串，给出文件 name上次被修改的时间。如果指定了time ，它是这个文件要设置成的修改时间。(等价与 Unix 的 touch)。这个时间是用标准的 POSIX 方式(fashion)度量的，即从一个固定的开始时间至今的秒数(通常是1970年1月1日)。如果文件不存在或它的修改时间不可查询或设置则生成一个错误。

file nativename name
    返回文件的特定于平台的名字。如果这个文件名需要传递给特定于系统的调用，比如对在 Windows 下的 exec 或在 Macintosh 上的 AppleScript 将会有用。

file owned name
    如果文件 name 由当前用户所有则返回 1，否则返回 0。

file pathtype name
    返回 absolute、relative、volumerelative 中的一个。如果 name 参照一个在指定卷上的指定文件，路径类型将是 absolute。如果 name 参照一个相对当前工作目录的一个文件，则路径类型将是 relative。如果 name 参照在指定卷上的相对于当前工作目录的一个文件，或者在当前工作卷上的指定文件，则路径类型是 volumerelative。

file readable name
    如果文件 name 对当前用户是可读的则返回 1，否则返回0。

file readlink name
    返回由 name 给出的符号连接的值(比如，它指向的文件的名字)。如果 name 不是符号连接或它的值不可读，则返回一个错误。在不支持符号连接的系统上这个选项未定义。

file rename ?-force? ?--? source target

file rename ?-force? ?--? source ?source ...? targetDir
    第一种形式接受由路径名source 指定的文件或目录并且把它重命名成 target，如果路径名 target指定了在不同目录下的一个名字，则移动这个文件。如果 target 是一个现存的目录，则使用第二种形式。第二中形式移动每个 source 文件或目录到目录 targetDir 中。除非指定了-force选项否则不覆写现存的文件。尝试覆写一个非空目录，用一个文件覆写一个目录，或者用一个目录覆写一个文件将导致错误。参数按指定的次序被处理，如果有错误的话，在第一个错误处停止(halt)。一个 -- 标记选项的结束；在 -- 之后的参数即使以 - 开始将仍被作为一个 source 来对待。

file rootname name
    返回 name 的最后一个组成部分的最后一个“.”之前但不包括这个“.”的 name中的所有字符。如果 name 的最后的组成部分不包含点号，则返回 name。

file size name
    返回给出文件 name 的大小的以字节为单位的一个十进制字符串。如果文件不存在或它的大小不可查询则生成一个错误。

file split name
    返回一个列表，它的元素是在 name 中的路径的组成部分。列表的第一个元素将与 name 有相同的路径类型。所有其他元素将是相对的。除了需要确保一个元素是相对的而无歧义之外，丢弃路径分隔符。例如，在 Unix 下
    file split /foo/~bar/baz 返回 / foo ./~bar baz 来确保以后的命令在第三个组成部分上不进行波浪线替换。

file stat  name varName
    在 name 上调用 stat 内核调用，并且使用由 varName 给出的变量来持有从内核调用返回的信息。VarName 被作为一个数组变量来对待，并且给这个变量设置下列元素: atime、ctime、dev、gid、ino、mode、mtime、nlink、size、type、uid。除了 type之外的每个元素都是一个十进制字符串，它们的值来自从 stat 返回的结构中相应的字段。这些值的意义详见 stat 的手册条目。type 元素给出的文件类型与命令 file type 返回的有相同的形式。这个命令返回一个空串。

file tail name
    返回在最后一个目录分隔符之后的在 name中的所有字符。如果 name 不包含分隔符则返回name。

file type name
    返回给出文件 name 的类型的一个字符串，它将是file、directory、characterSpecial、 blockSpecial、fifo、link、或 socket 中的一个。

file volume
    返回一个适当的 Tcl 列表，给出到挂装在系统上的卷的绝对路径。在Macintosh上，将是挂装驱动器的一个列表，包括本地的和网络的二者。N.B.(?)如果两个驱动器有相同的名字，它们都将出现在卷列表上，但当前没有办法从Tcl 来访问除了第一个之外的任何驱动器。在 UNIX 上，命令将总是返回 "/"，因为所有文件系统都是本地挂装的。在 Windows 上，它将返回可获得的本地驱动器的一个列表(比如，{a:/ c:/})。

file writable name
    如果文件 name 对当前用户是可写的则返回 1，否则返回 0。

移植要点 PORTABILITY ISSUES

Unix
    这些命令总是使用真实用户和组标识而不使用有效用户和组标识。

参见 SEE ALSO
filename

关键字 KEYWORDS
attributes, copy files, delete files, directory, file, move files, name, rename files, stat

[中文版维护人]
寒蝉退士

[中文版最新更新]
2001/06/21

《中国 Linux 论坛 man 手册页翻译计划》:
http://cmpp.linuxforum.net