CS 279 - Week 2 Lecture 2 - 2022-08-31

TODAY WE WILL
*   announcements
*   more filesystem and file stuff!
*   prep for next class

=====
a little more on ls, part 1
=====
*   one of ls's MANY options:  a, for all
    *   to see all the files in a directory,
        including the invisible ones

    ls -a

=====
cp intro
=====
*   cp - your basic copy command

*   most basic use:

    cp existing-file desired-new-file

    *   makes a copy of existing-file with the
        name desired-new-file, and existing-file
	still exists and is unchanged afterwards

=====
QUICK aside: diff command
=====
*   lovely for comparing two text files!
*   does a line-by-line comparison of its two
    argument file names
*   if it finds differences, it lists them --
    if it does not, it has no output

=====
back to cp!
=====
*   IF you call cp with a list of arguments
    and the last one is a directory file,
    (and only the last one is a directory file),
    it makes a copy of each of those files
    in that given directory (each with the same
    name they have in this directory)

    cp file1 file2 ... desired-dir

    ...and now there are copies of file1, file2, ...
    in desired-dir (and also in the current directory)

=====
mv command
=====
*   mv for move!
*   NOW you are getting rid of the original...
    you are moving the file from one name to another
    name

*   one way of using:

    mv desired-file new-file-name

    ...now there will NOT be a file named desired-file
    anymore, but its contents will be in a file
    named new-file-name

*   and if you call mv with a list of non-directory
    files followed by a directory file,
    then it "moves" them to that directory file,
    and they are no longer in the current directory!

    mv file1 file2 ... dir-name

    ...now file1, file2, ... are no longer in the
    current directory, but they are now in dir-name

=====
shell file globbing! PART 1
=====
*   actually discussed in 2021 revision of course text,
    Chapter 16...!
    16.1: "File globbing is the use of wildcards
           to specify a set of filenames"

    You can use this in a shell that supports this
    within shell commands

    *   bash supports several wildcard characters,
        arguably the most commonly-used is *

    *   in file globbing, * matches 0 or more characters
        (in visible file names...)

        *.txt   # matches all files ending in .txt
	m*      # matches all files starting with m
	m*.txt  # matches all files that start
	        #    with m and end with .txt

        a*b*c*d* # matches all files that start with a
	         #    and have a b after that and
		 #    have a c after that and have a
		 #    d after that (and I don't care
		 #    how it ends)


    mkdir code-copies
    cp *.cpp *.h code-copies
    cp * ..
    cp ../* .

=====
rm and rmdir
=====
*   rmdir followed by a directory name
    will, IF that dirctory is empty, REMOVE that
    directory

    rmdir a-dir-name  # removes a-dir-name IF it is
                      #    empty

*   rm followed by a list of filenames
    removes the non-directory files from that list

    DEPENDING on how the system is set up,
    this may or may not be un-doable!!!!!!!!!!

    *   be careful with wildcards and rm....!!!!!

*   a safer approach:
    use rm with its i, or interactive, option

    rm -i *.cpp

*   a useful-but-be-careful option:
    use rm with its r, or recursive, option
    to recursively remove contents of all
    subdirectories, and their subdirectories, ...!