1.5 KiB
title | tags | ||
---|---|---|---|
Terminal Tips |
|
Track Live Changes
See changes in a file as it changes:
tail -f *somefile*
See changes in a directory, as it changes:
watch -d ls *directory*
Automatic Renaming
There are a bunch of files:
- Column CV.aux
- Column CV.log
- Column CV.out
- Column CV.pdf
- Column CV.tex
- tccv.cls
Goal: swap the word "Column" for "Alice" in all files.
IFS=$'\n'
for f in $(find . -name "Col*"); do
mv "$f" $(echo "$f" | sed s/Column/Alice/)
done
IFS is the field separator. This is required to denote the different files as marked by a new line, and not the spaces.
Arguments and Input
The rm' program takes arguments, but not
stdin' from a keyboard, and therefore programs cannot pipe results into rm.
That said, we can sometimes pipe into rm with xargs rm' to turn the stdin into an argument. For example, if we have a list of files called
list.txt' then we could use cat as so:
cat list.txt | xargs rm
... However, this wouldn't work if spaces were included, as rm would take everything literally.
Numbers
Add number to variables with:
let "var=var+1"
let "var+=1"
let "var++"
((++var))
((var=var+1))
((var+=1))
var=$(expr $var + 1)
((n--))
works identically.
Finding Duplicate Files
find . -type f -exec md5sum '{}' ';' | sort | uniq --all-repeated=separate -w 15 > all-files.txt
Output random characters
cat /dev/urandom | tr -cd [:alnum:] | dd bs=1 count=200 status=none && echo