- Welche shell läuft?
- macOS - IP Adresse per command substitution einbauen
- Ein Zeilenumbruch in langen Befehlszeilen ist mit
\
möglich. - Schnelles erstellen einer Textdatei
- Nummerierte Verzeichnisse erzeugen
- Alle Dateien eines Typs (extension) bewegen
- Alle Verzeichnisse löschen
- Filtern nach Dateigröße
- Logfile mit System- und Dateizeiten
- Teile von Filenamen löschen
- Alle .tex Files in einem Verzeichnis bearbeiten
- wget – Web Grabber
- sed
- cURL
- xargs
Welche shell läuft?
echo $SHELL
# oder
echo $0
macOS - IP Adresse per command substitution einbauen
echo HOST_IP=$(ifconfig en0 | awk '/ *inet /{print $2}')
Ein Zeilenumbruch in langen Befehlszeilen ist mit \
möglich.
$ date \
> -I
2019-10-24
Schnelles erstellen einer Textdatei
cat >test.txt
this is
a test
^D
# ^D ... EOF (at beginning of new line), ^C ... SIGINT
Nummerierte Verzeichnisse erzeugen
#!/bin/bash
# create_dirs.bash
for num in $(seq -w 01 50); do
mkdir "$num"
done
Ein zusätzliches nummeriertes Verzeichnis:
#!/bin/bash
# -------------------------------------------------------
# find last created directory: format NNNN
# -------------------------------------------------------
lastdir=$(ls -d [0-9][0-9][0-9][0-9] | tail -1)
# -------------------------------------------------------
# create new sequential directory
# -------------------------------------------------------
newdir=$((++lastdir))
mkdir $(printf "%04u" $newdir)
Alle Dateien eines Typs (extension) bewegen
#!/bin/bash
# search all subfolders for mp4 files and move all of them to the current folder
find . -mindepth 2 -type f -name "*.mp4" -print -exec mv {} . \;
Alle Verzeichnisse löschen
remove all directories (and contents) but not files in pwd
$ find -mindepth 1 -maxdepth 1 -type d -exec rm -r {} \;
# gfind on mac GNU find!
Filtern nach Dateigröße
#!/bin/bash
# move all smaller mp4 files to ../fin
# larger ones to ../lager
maxsize=500000000 # 500 MB
files=(*.mp4)
filecount="${#files[@]}"
#echo $files
#echo $filecount
for (( i=0; i<$filecount; i++ ))
do
#>>>>>
filename="${files[$i]}"
filesize=$(stat -f%z "$filename")
echo "$filename $filesize"
if (( filesize > maxsize )); then
mv "$filename" "../lager"
else
mv "$filename" "../fin"
fi
#<<<<<
done
stat -f%z
ist macOS spezifisch, Linux stat -f%s
?
Logfile mit System- und Dateizeiten
#
# create a log-file entry
#
currentDate=`date +"%d.%m.%Y %H:%M"` # 26.09.2019 11:33
mysqlFile=dump.tar.gz
termineFile=termine.csv
# https://stackoverflow.com/questions/12169710/formatted-modified-date-time-of-file-on-mac-bash
mysqlFileDate=`stat -f "%Sm" -t "%d.%m.%Y %H:%M" ${mysqlFile}`
termineFileDate=`stat -f "%Sm" -t "%d.%m.%Y %H:%M" ${termineFile}`
echo "${currentDate}: ${mysqlFile}(${mysqlFileDate}) ${termineFile}(${termineFileDate})" >> copy_dump_from_htl.log
# show the last 5 lines of logfile
tail -n 5 copy_dump_from_htl.log
Teile von Filenamen löschen
for filename in ./*; do mv "./$filename" "./$(echo "$filename" | sed -e 's/to delete//g')"; done
Alle .tex Files in einem Verzeichnis bearbeiten
#!/bin/sh
#
# alle .tex Files in einem Verzeichnis bearbeiten
#
for filename in *.tex; do
[ -f "$filename" ] || break # if exists and is regular file
echo $filename "${filename%.*}.md"
done
wget – Web Grabber
Download einer kompletten Website
$ wget --mirror --convert-links --adjust-extension --page-requisites --no-parent https://matejkaf.github.io/Doc/5AHELS.html
sed
In Markdown file alle
**Übung (Zeitrechnung):**
in
#### Übung (Zeitrechnung)
wandeln:
$ gsed -r "s/\*\*(Übung.*):\*\*/#### \1/" challenge01.md >challenge01_.md
$ -r, --regexp-extended
Oder inplace mit -i
$ gsed -i -r "s/\*\*(Übung.*):\*\*/#### \1/" challenge01.md
Ersetze alle $$
denen mindestens ein Buchstabe folgt mit $
$ gsed -i -r 's/\$\$(.)/\$\1/g' xyz.md
cURL
Länge einer Website
$ curl --head --silent google.com | grep 'Content-Length' | cut -d ' ' -f 2
219
xargs
Erstellt ein neues Kommando aus dem Output eines anderen Kommandos.
grep ergibt alle Pfade mit einem bestimmten Inhalt, für jedes davon wc
anwenden.
$ ggrep -r -l --include=\*.md mathjax.org . | xargs wc
94 395 3562 ./Cryptography/python/07_hmac.md
102 461 3342 ./Cryptography/python/09_block_cipher_manipulation.md
118 491 4051 ./Cryptography/07_pubkey_math.md
...
224 970 7881 ./Cybersecurity_3/lecture/06_passwoerter.md
48 186 1754 ./Java_3/04_Arrays_en/07_Arrays_ue_weg.md
116 724 5452 ./Java_3/04_Arrays_en/15_Arrays_Polynom.md
3838 14030 104491 total
sed auf einem bestimmten Satz von Dateien ausführen
ggrep -r -l --include=\*.md mathjax.org . | xargs gsed -i -r 's/\$\$(.)/\$\1/g'
Alle Dateien mit Endung md
die den Text mathjax.org
beinhalten öffnen:
ggrep -r -l --include=\*.md mathjax.org . | xargs open
Mit der Option -I
werden mehrere Kommandos generiert nicht nur eines.