file 方法简介

[file option name ?arg arg ...?]

file 操纵文件名和属性,这个命令提供在一个文件名属性上的一些操作。Name 是一个文件的名字;如果它以波浪线(~)开始,则在执行命令之前进行波浪线替换。Option 指示对文件名做什么处理。接受 option 的任何唯一的缩写。

以下方法测试节点说明

# [topnode]指向上级节点对象
[value [topnode].file]


1、atime 显示或者设置文件上次访问时间戳

file atime name ?time?

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

Nuke中使用案例

# 获取指定文件的上次访问时间
[file atime [value [topnode].file]]



# 设置指定文件的上次访问时间
[file atime [value [topnode].file] 1537329990]


2、attributes 返回或设置与一个文件相关联的特定于平台的值

file attributes name ?option?
file attributes name ?option value option value...?

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

Unix 系统

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

Windows 系统

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

Macintosh 系统(苹果系统)

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

3、copy 复制文件或者目录到指定位置

file copy ?-force? ?- -? source target
file copy ?-force? ?- -? source ?source ...? targetDir

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

Nuke中使用案例

# 拷贝到指定文件夹
[file copy -force [value [topnode].file] G:/test/tcl_test/]
# 拷贝到指定文件夹并修改文件名称
[file copy -force [value [topnode].file] G:/test/tcl_test/test2.mov]

4、delete 删除指定的文件或目录

file delete ?-force? ?- -? pathname ?pathname ... ?

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

Nuke中使用案例

# 删除指定文件
[file delete -force [value [topnode].file]]

5、dirname 返回路径中的目录部分

file dirname name

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

如果 name 参照一个根目录,则返回根目录。例如:

file dirname c:/
#返回 c:/。

注意波浪线替换只在必要的时候进行用以补全(complete)命令。例如:

file dirname ~/src/foo.c
# 返回 ~/src,而
file dirname ~
# 返回 /home (或类似的东西)。

Nuke中使用案例

[file dirname [value [topnode].file]]


6、executable 返回当前用户文件执行权限

file executable name

如果文件对当前用户是可执行的则返回 1,否则返回 0

Nuke中使用案例

[file executable [value [topnode].file]]

7、exists 文件是否存在

file exists name

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

Nuke中使用案例

[file exists [value [topnode].file]]

8、extension 获取文件扩展名

file extension name

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

Nuke中使用案例

[file extension [value [topnode].file]]

9、isdirectory 判断是否是目录

file isdirectory name

如果文件 name 是一个目录则返回 1,否则返回 0

Nuke中使用案例

[file isdirectory [value [topnode].file]]

10、isfile 判断是否是正规文件

file isfile name

如果文件 name 是一个正规文件则返回 1,否则返回 0

Nuke中使用案例

[file isfile [value [topnode].file]]

11、join 用路径分隔符连接多个字符串

file join name ?name ...?

接受一个或多个文件名并使用对当前平台正确的路径分隔符来组合它们。

如果特定的 name 是相对的,则它会被连接到前面的文件名参数上。否则,丢弃所有以前的参数,从当前的参数开始进行连接。例如:

# 如果字符串中间包含路径分隔字符串,前面字符串将会被放弃
file join a b /foo bar
# 返回 /foo/bar。

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

Nuke中使用案例

[file join [basename [value [topnode].file]] test2.mov]

12、mkdir 建立指定的目录

file mkdir dir ?dir ...?

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

Nuke中使用案例

[file mkdir G:/test/tcl_test2/]

13、mtime 返回或者设置文件修改时间

file mtime name ?time?

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

Nuke中使用案例

# 读取修改时间
[file mtime [value [topnode].file]]
# 设置修改时间
[file mtime [value [topnode].file] 1537329990]

14、owned 文件是否是当前用户所有

file owned name

如果文件 name 由当前用户所有则返回 1,否则返回 0

Nuke中使用案例

[file owned [value [topnode].file]]

15、pathtype 路径类型

pathtype owned name

返回 absoluterelativevolumerelative 中的一个。

  • 如果 name 参照一个在指定卷上的指定文件,路径类型将是 absolute
  • 如果 name 参照一个相对当前工作目录的一个文件,则路径类型将是 relative
  • 如果 name 参照在指定卷上的相对于当前工作目录的一个文件,或者在当前工作卷上的指定文件,则路径类型是 volumerelative

Nuke中使用案例

[file pathtype [value [topnode].file]]

16、rename 重命名文件

file rename ?-force? ?- -? source target
file rename ?-force? ?- -? source ?source ...? targetDir

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

Nuke中使用案例

[file rename [value [topnode].file] G:/test/tcl_test2/test2.mov]

17、rootname 文件根路径

file rootname name

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

Nuke中使用案例

[file rootname [value [topnode].file]]
# 返回 G:/test/test

18、size 文件大小

file size name

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

Nuke中使用案例

[file size [value [topnode].file]]

19、split 拆分路径和文件名

file split name

返回一个列表,它的元素是在 name 中的路径的组成部分。列表的第一个元素将与 name 有相同的路径类型。所有其他元素将是相对的。除了需要确保一个元素是相对的而无歧义之外,丢弃路径分隔符。

例如,在 Unix 下

file split /foo/~bar/baz
# 返回 / foo ./~bar baz 来确保以后的命令在第三个组成部分上不进行波浪线替换。

Nuke中使用案例

[file split [value [topnode].file]]
# 返回 G:/test test.mov

20、tail 返回最后一个分隔符后面字符串

file tail name

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

Nuke中使用案例

[file tail [value [topnode].file]]

21、type 文件类型

file type name

返回给出文件 name 的类型的一个字符串,它将是 filedirectorycharacterSpecialblockSpecialfifolink、或 socket 中的一个。

Nuke中使用案例

[file type [value [topnode].file]]

22、volume 系统中存在的卷号

file volume

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

Nuke中使用案例

[file volume]
# 返回 C:/ D:/ G:/ Z:/

23、writable 文件是否可写

file writable name

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

Nuke中使用案例

[file writable [value [topnode].file]]