. Information about Files - file, glob .
[ Previous | Index | Next ]
There are two commands that provide information about the file system, glob and file.
Glob provides the access to the names of files in a directory. It uses a name matching mechanism similar to ls, to return a list of names that match a pattern.
File provides two sets of functionality:
- string manipulation appropriate to parsing file names
- dirname ........ Returns directory portion of path
- extension........ Returns file name extension
- rootname ....... Returns file name without extension
- tail .................... Returns filename without directory
- information about an entry in a directory:
- atime ................ Returns time of last access
- executable ..... Returns 1 if file is executable by user
- exists ................ Returns 1 if file exists
- isdirectory ...... Returns 1 if entry is a directory
- isfile .................. Returns 1 if entry is a regular file
- lstat ................... Returns array of file status information
- mtime ............... Returns time of last data modification
- owned ................ Returns 1 if file is owned by user
- readable............ Returns 1 if file is readable by user
- readlink............. Returns name of file pointed to by a symbolic link
- size ..................... Returns file size in bytes
- stat ..................... Returns array of file status information
- type .................... Returns type of file
- writable ............ Returns 1 if file is writeable by user
Between these two commands, a program can obtain most of the information that it may need.
- glob ?switches? pattern ?patternN?
- returns a list of file names that match pattern or patternN
Switches may be one of:
- -nocomplain
- Allows glob to return an empty list without causing an error. Without this flag, an error would be generated when the empty list was returned.
- --
- Marks the end of switches. This allows the use of "-" in a pattern without confusing the glob parser.
Pattern follows the same matching rules as the string match globbing rules with these exceptions:
- {a,b,...} Matches any of the strings a,b, etc.
- A "." at the beginning of a filename must match a "." in the filename. The "." is only a wildcard if it is not the first character in a name.
- All "/" must match exactly.
- If the first two characters in pattern are ~/, then the ~ is replaced by the value of the HOME environment variable.
- If the first character in pattern is a ~, followed by a login id, then the ~loginid is replaced by the path of loginid's home directory.
Note that the filenames that match pattern are not in a sorted order.
- file atime name
- Returns the number of seconds since 1/1/1970 when the file name was last accessed. Generates an error if the file doesn't exist, or the access time cannot be queried.
- file dirname name
- Returns the directory portion of a path/filename string. If name contains no slashes, file dirname returns a ".". If the last "/" in name is also the first character, it returns a "/".
- file executable name
- Returns a 1 if file name is executable by the current user, otherwise returns a 0.
- file exists name
- Returns a 1 if the file name exists, and the user has search access in all the directories leading to the file. Otherwise, a 0 is returned.
- file extension name
- Returns the file extension.
- file isdirectory name
- Returns 1 if file name is a directory, otherwise returns 0.
- file isfile name
- Returns 1 if file name is a regular file, otherwise returns 0.
- file lstat name varName
- This returns the same information returned by the system call lstat. The results are placed in the associative array varName. The indexes in varName are:
- atime.......time of last access
- ctime.......time of last file status change
- dev...........inode's device
- gid............group ID of the file's group
- ino............inode's number
- mode.......inode protection mode
- mtime.....time of last data modification
- nlink........number of hard links
- size...........file size, in bytes
- type..........Type of File
- uid.............user ID of the file's owner
Because this calls lstat, if name is a symbolic link, the values in varName will refer to the link, not the file that is linked to. See stat also.
- file mtime name
- Returns the time of the last data modification in seconds since Jan 1, 1970.
- file owned name
- Returns 1 if the file is owned by the current user, otherwise returns 0.
- file readable name
- Returns 1 if the file is readable by the current user, otherwise returns 0.
- file readlink name
- Returns the name of the file a symlink is pointing to. If name isn't a symlink, or can't be read, an error is generated.
- file rootname name
- Returns all the characters in name up to but not including the last ".". Returns $name if name doesn't include a ".".
- file size name
- Returns the size of name in bytes.
- file stat name varName
- This returns the same information returned by the system call stat. The results are placed in the associative array varName. The indexes in varName are:
- atime.......time of last access
- ctime.......time of last file status change
- dev...........inode's device
- gid............group ID of the file's group
- ino............inode's number
- mode.......inode protection mode
- mtime.....time of last data modification
- nlink........number of hard links
- size...........file size in bytes
- type..........Type of file
- uid.............user ID of the file's owner
- file tail name
- Returns all of the characters in name after the last slash. Returns $name if name contains no slashes.
- file type
name
- Returns a string giving the type of file name, which will be one of:
- file...................................Normal file
- directory........................Directory
- characterSpecial.......Character oriented device
- blockSpecial.............. Block oriented device
- fifo...................................Named pipe
- link..................................Symbolic link
- socket............................Named socket
- file writable name
- Returns 1 if file name is writable by the current user, otherwise returns 0.
--
. Example .
set ail1 [glob PATTERN1]
set ail2 [glob PATTERN2]
set fmt "%-12s %-16s %8s %-7s"
puts "[format "$fmt Comment" "Directory" "Name" "Inode" "Type"]"
foreach name [concat $ail1 $ail2] {
;# split the name into pieces for display:
set dir [file dirname $name]
set filename [file tail $name]
;# Collect some status and type info.
file stat $name arr
set type [file type $name]
;# Display what we've learned.
puts -nonewline "[format $fmt $dir $filename $arr(ino) $type]"
;# and particular data depending on whether item is a file
;# or symbolic link.
if {[string match [file type $name] "link"]} {
puts " points to: [file readlink $name]"
}
if {[string match [file type $name] "file"]} {
puts " Size: [file size $name] bytes "
}
}
|