Filenames can have spaces!
So when you deal with them either surround the filename with apostrophes like this: "my file name.txt" or escape the spaces my\ file\ name.txt. Otherwise, don’t create new file names with spaces or escape characters to keep your sanity.
Wildcards
* greedy wildcard
? single character wildcard
[] single character list of wildcards
{} pattern list of wildcards
Say you have files:
kale1.txt, kale1a.txt, kale2.txt, kale2a.txt, kale3a.kale
$ ls kale?.txt – would match kale1.txt, kale2.txt
$ ls kale[1-3].txt – would match kale1.txt, kale2.txt
$ ls kale[1-3].txt – would match kale1.txt, kale2.txt
$ ls kale{2, 2a}.txt – would match kale2.txt, kale2a.txt
$ ls *.txt – would match all the txt files
$mv *.kale Kale\ Files – would move all .kale files to another directory
reading files and finding within files – cat, less, grep
cat – reading files
you can cat multiple files and even cat multiple files and pipe them into another
$ cat file1.txt file2.txt > files3.txt
less – reading files in a scrollable way
less is actually more, more is actually less! Note how this two executables are the exact same size!
$ ls -l /usr/bin/{more,less}
How to make less more bearable
$ less -M filename – the M flag will show you where you are in the file and what percentage you are in.
During less:
Space – advance to the next page
b – advance back one page
v – starts vim
g – goes to beginning of file
G – goes to end of file
/word searches forward for a word
?word searches backwards for a word
grep – finding within files
grep uses a different, more sophisticated regular expressions system then the wildcards from above
$ grep secrets *.txt – searches for the text “secrets” in all the .txt files
moving and copying files with wildcards!
mkdir – making directories
mkdir takes wildcards! So if you wanted to make a different directory for the next three years, try:
$ mkdir taxes20{18,19,20}
cp – copying
cp takes wildcards! So if you wanted to move those new directories into a sub directory
$ touch taxes20{18,19,20}.txt # creates these files
$ cp taxes20{18,19,20}.txt ./taxes # copies those files into a new “taxes” directory
mv – moving
more wildcards!
$ mv -i taxes20{18,19,20}.txt ./my_taxes # moves those files into a new “my_taxes” directory interactively
rm – removing
$ rm -i .[^.]* removes all hidden files (., ..)
$ rm -i taxes*.txt removes all files with that wildcard
compressing
gzip for single files
$ ls -l to check the size of the file you are going to compress
Then use $ gzip -v to compress (verbose), $ gunzip -v to uncompress (verbose)
tar for directories, tar+gzip for the ultimate combo
$ du -s Kale\ Recipes to check the size in 512 byte blocks
$ tar -czvf my_kale_recipes.tgz "Kale Recipes" – to compress
$ tar -xvzf my_kale_recipes.tgz – to uncompress
where:
-c is to designate you are creating an archive
-x is to designate you are extracting an archive
-z is for using gzip,
-v is for verbose,
-f is to designate you are providing a filename
.tgz is the file extension for tarballs that are gzipped, sometimes you will see .tar.gz