Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
For 2023 (and 2024 ...) - we are now fully retired from IT training.
We have made many, many friends over 25 years of teaching about Python, Tcl, Perl, PHP, Lua, Java, C and C++ - and MySQL, Linux and Solaris/SunOS too. Our training notes are now very much out of date, but due to upward compatability most of our examples remain operational and even relevant ad you are welcome to make us if them "as seen" and at your own risk.

Lisa and I (Graham) now live in what was our training centre in Melksham - happy to meet with former delegates here - but do check ahead before coming round. We are far from inactive - rather, enjoying the times that we are retired but still healthy enough in mind and body to be active!

I am also active in many other area and still look after a lot of web sites - you can find an index ((here))
The fileutil package and a list of file system commands in Tcl

On top of the file commands, the ::fileutil package which is shipped with Tcl includes a range of commonly used structures ("design patterns") which means you don't have to keep wring your own composites. Here is a combined list, sorting them out by category rather than by which command or package they happen to be a part of:

File and path handling commands that do NOT look at the actual file system:

file dirname name
file extension name
file join name ?name ...?
file nativename name
file pathtype name
file rootname name
file split name
file tail name
::fileutil::lexnormalize path
::fileutil::fullnormalize path
::fileutil::stripN path n
::fileutil::stripPwd path
::fileutil::stripPath prefix path
::fileutil::jail jail path
::fileutil::relative base dst
::fileutil::relativeUrl base dst

Commands that test files and tell you about their status / type

file atime name
file executable name
file exists name
file isdirectory name
file isfile name
file lstat name varName
file mtime name
file owned name
file readable name
file readlink name
file size name
file stat name varName
file system name
file type name
file writable name
::fileutil::test path codes ? msgvar ? ? label ?

Commands that read / manipulate files and their contents

file copy ?-force? ?--? source target
file copy ?-force? ?--? source ?source ...? targetDir
file delete ?-force? ?--? pathname ?pathname ... ?
file mkdir dir ?dir ...?
file rename ?-force? ?--? source target
file rename ?-force? ?--? source ?source ...? targetDir
::fileutil::cat ( ? options ? file)...
::fileutil::writeFile ? options ? file data
::fileutil::appendToFile ? options ? file data
::fileutil::insertIntoFile ? options ? file at data
::fileutil::install ? -m mode ? source destination
::fileutil::touch ? -a ? ? -c ? ? -m ? ? -r ref_file ? ? -t time ? filename ? ... ?
::fileutil::removeFromFile ? options ? file at n
::fileutil::replaceInFile ? options ? file at n data
::fileutil::updateInPlace ? options ? file cmd

Commands that search for files that meet criteria

::fileutil::fileType filename
::fileutil::find ? basedir ? filtercmd ? ?
::fileutil::findByPattern basedir ? -regexp|-glob ? ? -- ? patterns
::fileutil::foreachLine var filename cmd
::fileutil::grep pattern ? files ?

Commands that handle temportary directories

::fileutil::tempdir path
::fileutil::tempfile ? prefix ?

Commands that work with the internals

file attributes name
file attributes name ?option?
file attributes name ?option value option value...?
file channels ?pattern?
file volumes

Some examples

  set about [fileutil::fileType requests.xyz]
  puts $about

(note that file type tells you whether a file is a directory, plain file, link, etc, whereas fileutil::fileType tells you about the file contents - whether it's plain text, for example.

Read the whole of a file, split it into a list, and process it line by line.

  set content [split [fileutil::cat requests.xyz] "\n"]
  foreach line $content {
    set record [split $content " "]
    set name [lindex $line 0]
    puts "Let me tell you about $name"
    foreach skill [lrange $line 1 end] {
      puts ".... (s)he knows $skill"


  Let me tell you about antonia
  .... (s)he knows Perl
  .... (s)he knows XML
  .... (s)he knows PHP
  .... (s)he knows Tcl/Tk
  .... (s)he knows MySQL
  Let me tell you about barbara
  .... (s)he knows Tcl/Tk
  .... (s)he knows ASP
  .... (s)he knows Ruby
  .... (s)he knows Java


Recursive list of my home directory:

  set relations [fileutil::find $env(HOME)]
  puts $relations

List all files under my parent directory ending in .txt

  set relations [fileutil::findByPattern .. -regexp {\.txt$}]
  puts $relations

Find all files in my live web site data directory over 2 Mbytes in size:

  proc is_big name {
    return [expr [file size $name] > 2000000]
  set huge [fileutil::find /Library/WebServer/live_html/data is_big]
  puts [join $huge \n]

Complete example on our web site [here]. This example now covered on our Learning to Program in Tcl and Tcl and Expect programming courses.
(written 2012-02-18)

Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
T209 - Tcl/Tk - File and Directory Handling
  [779] The fragility of pancakes - and better structures - (2006-06-26)
  [785] Running external processes in Tcl and Tcl/Tk - (2006-06-29)
  [1407] Reading from another process in Tcl (pipes and sockets) - (2007-10-26)
  [1426] Buffering up in Tcl - the empty coke can comparison - (2007-11-10)
  [1467] stdout v stderr (Tcl, Perl, Shell) - (2007-12-10)
  [2467] Tcl - catching an error before your program crashes - (2009-10-22)
  [3192] Tcl - Some example of HOW TO in handling data files and formats - (2011-03-04)
  [3320] Reading the nth line from a file (Perl and Tcl examples) - (2011-06-09)
  [3429] Searching through all the files in or below a directory - Ruby, Tcl, Perl - (2011-09-09)
  [4461] Reading from a URL, and reading Json, from your Tcl script - (2015-03-12)
  [4523] Catching failed commands and not crashing the program in Tcl - (2015-10-10)
  [4524] Tcl - a new example for data reformatting - (2015-10-10)

Back to
Bus top - colours of London
Previous and next
Horse's mouth home
Forward to
lists and struct::list in Tcl - Introduction to struct::list and examples
Some other Articles
Matching regular expressions, and substitutions, in Ruby
Finding the total, average, minimum and maximum in a program
Ruby v Perl - a comparison example
lists and struct::list in Tcl - Introduction to struct::list and examples
The fileutil package and a list of file system commands in Tcl
Bus top - colours of London
Historic documents for Wiltshire
Tcl - dicts - a tutorial and examples
Keeping Business Local. But is that realistic?
Help to get online in Melksham
4759 posts, page by page
Link to page ... 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96 at 50 posts per page

This is a page archived from The Horse's Mouth at http://www.wellho.net/horse/ - the diary and writings of Graham Ellis. Every attempt was made to provide current information at the time the page was written, but things do move forward in our business - new software releases, price changes, new techniques. Please check back via our main site for current courses, prices, versions, etc - any mention of a price in "The Horse's Mouth" cannot be taken as an offer to supply at that price.

Link to Ezine home page (for reading).
Link to Blogging home page (to add comments).

You can Add a comment or ranking to this page

© WELL HOUSE CONSULTANTS LTD., 2024: 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
PH: 01144 1225 708225 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.net/mouth/3617_The ... n-Tcl.html • PAGE BUILT: Sun Oct 11 16:07:41 2020 • BUILD SYSTEM: JelliaJamb