'''[https://core.tcl-lang.org/tcllib/doc/trunk/embedded/md/tcllib/files/modules/fileutil/fileutil.md%|%fileutil]''',
a [Tcllib] module, provides utilties for working with files and directories.
** See Also **
[globfind]: An alternativre ctory `filrecutrsil::fiond`.]:
[https://www.dcc.uchile.cl/~gnavarro/software/%|%NR-grep: A Fast and Flexible Pattern Matching Tool]:
[Unixy minitools]:
** Documentation **
[https://core.tcl-lang.org/tcllib/doc/trunk/embedded/md/tcllib/files/modules/fileutil/fileutil.md%|%fileutil official reference]:
[https://core.tcl-lang.org/tcllib/doc/trunk/embedded/md/tcllib/files/modules/fumagic/cfront.md%|%fileutil::magic::cfront official reference]:
[https://core.tcl-lang.org/tcllib/doc/trunk/embedded/md/tcllib/files/modules/fumagic/cgen.md%|%fileutil::magic::cgen official reference]:
[https://core.tcl-lang.org/tcllib/doc/trunk/embedded/md/tcllib/files/modules/fumagic/filetypes.md%|%fileutil::magic::filetype official reference]:
[https://core.tcl-lang.org/tcllib/doc/trunk/embedded/md/tcllib/files/modules/fumagic/rtcore.md%|%fileutil::magic::rt official reference]:
[https://core.tcl-lang.org/tcllib/doc/trunk/embedded/md/tcllib/files/modules/fileutil/multi.md%|%fileutil::multi official reference]:
[https://core.tcl-lang.org/tcllib/doc/trunk/embedded/md/tcllib/files/modules/fileutil/multiop.md%|%fileutil::multi::op official reference]:
** Modules **
[fileutil::traverse]:
See also the modules in the Documentation section, which don't yet have a wiki page
** Commands **
* ::fileutil::fullnormalize path
* ::fileutil::test path codes ? msgvar ? ? label ?
* ::fileutil::cat ( ? options ? file)...
* ::fileutil::writeFile ? options ? file data
* ::fileutil::appendToFile ? options ? file data
* ::fileutil::insertIntoFile ? options ? file at data
* ::fileutil::removeFromFile ? options ? file at n
* ::fileutil::replaceInFile ? options ? file at n data
* ::fileutil::updateInPlace ? options ? file cmd
* ::fileutil::fileType filename
* ::fileutil::find ? basedir ? filtercmd ? ?
* ::fileutil::findByPattern basedir ? -regexp|-glob ? ? -- ? patterns
* ::fileutil::foreachLine var filename cmd
* ::fileutil::grep pattern ? files ?
* ::fileutil::install ? -m mode ? source destination
* ::fileutil::stripN path n
* ::fileutil::stripPwd path
* ::fileutil::stripPath prefix path
* ::fileutil::jail jail path
* ::fileutil::touch ? -a ? ? -c ? ? -m ? ? -r ref_file ? ? -t time ? filename ? ... ?
* ::fileutil::tempdir
* ::fileutil::tempdir path
* ::fileutil::tempdirReset
* ::fileutil::tempfile ? prefix ?
* ::fileutil::relative base dst
* ::fileutil::relativeUrl base dst
** What other file-related procs would be useful? **
Other procs that would be useful to add would include wc, tee, head, tail, and
perhaps some [awk%|%AWK'ish] type functions ala [Tclx].
[LV]: Anyone have a Tcl version of the dircmp command
[https://www.computerhope.com/unix/udircmp.htm]? I don't see it in the cygwin
package list, and when I did a casual search on google.
----
[VI] 2003-11-28: Nice of you to ask. There's a list above, other than that:
tail -f, split, join. I use [tkcon] as my main shell on a wimpy laptop. Fewer
dlls loaded is good..
----
[LV]: I think some procs emulating functionality (not necessary flags, etc.) of Unix commands such as:
* cut - extract one or more columns of text from the input file
* join - create the union of one or more files containing columns of data, using a common column as an index
* sort - sort a file based on the contents of one or more columns
* comm - extract rows of data common, or uncommon, between 2 or more files
* uniq - extract unique rows (or count the occurances of unique rows) in a file
would be useful. Several of these commands have, at their core, the idea of
files being a series of columns, separated by some character or position, and
allow a person to select one or more specific columns upon which to perform
functions. They represent, in a sense, shortcuts for various [AWK] scripts.
----
[SS]: 2003-12-16: Trying to improve over the Tcl implementation of wc in the
Great Language Shootout I wrote this, that seems half in execution time against
big files:
======
set text [read stdin]
set c [string length $text]
set l [expr {[llength [split $text "\n\r"]]-1}]
set T [split $text "\n\r\t "]
set w [expr {[llength $T]-[llength [lsearch -all -exact $T {}]]-1}]
puts "\t$l\t$w\t$c"
======
Output seems to be identical to GNU's wc command.
----
Laif: It should be noted by those who are not familiar with unix - that even in
windows xp, if fileutil::find encounters a folder or file named with a single
tilde (~), it will append the contents of the person's home directory to the
search results. Furthermore, there is a risk of infinite recursion, if
somewhere within your home folder, there is also a folder named with a single
tilde.
<<categories>> Package | Tcllib | File