Erstmal ein DANK an alle.
Ich bin seit den Tipps fleissig am programmieren und wollte mich melden, wenn ich fertig bin.
udevadm info -q property /dev/sda | grep -E 'ID_PATH|ID_BUS'
Gefaellt mir sehr gut, habe ich uebernommen und ATA und USB aus der Antwort rausgeschnitten.
Deine Ausgabe Stammt von lsblk oder?
Richtig - gut erkannt!
Durch diesen Tipp kann ich jetzt allerdings einige Programmzeilen wieder entfernen. Meine Abfrage vorher sagte auch nur ATA oder USB, jetzt wird auch SATA angezeigt.
Meine kompakte Uebersicht werde ich jetzt wohl so lassen, aber den Befehl habe ich mir schon notiert!
Jetzt ueberlege ich und probiere schon, ob ich LSBLK genau sagen kann welche Spalten ich haben moechte, aber noch kein Erfolg;-)
- NAME, TRAN, SIZE, RM und das nur von SDA, SDB, ..., SDF
Code:
Hier die Loesung: lsblk -o NAME,RM,SIZE,TRAN
Knoppix wollte einige Befehle nicht umsetzen, zur Zeit probiere ich es auf UBUNTU MATE 18.04. Knoppix 8.3 habe ich, Knoppix 8.5 ist aber schon bestellt. Dann wird noch einmal auf Knoppix 8.5 getestet.
Hier im Bild steht MINT, es ist aber MATE, hatte ich in der VM nur falsch eingetragen;-)
Und jetzt noch uebersichtlicher gemacht! - (lsblk -o NAME,RM,SIZE,TRAN,MOUNTPOINT)
Diese Ansicht habe ich mir zusammenprogrammiert!
UPDATE Version: 190731, habe mal meinen neuen CODE hier reingestellt
Code:
#!/bin/bash
# Ingo Volmarstein - (190718) 190731
# Es werden nur die Disk angezeigt, die ich benoetige!
# chmod +x copy.sh - damit sich die Datei per bash copy.sh starten laesst
# copieren von Disk zu Disk
# Uebersichtliche Anzeige der angeschlossenen Datentraeger (Disk)
# lsblk -o NAME,RM,SIZE,TRAN,MOUNTPOINT - extern
finaletool=" " # ON - Dann verschwindet nur unten die Auswahl
statusmount=" " # ON - MOUNTPONTs werden angezeigt
statussdcard=" " # ON - SD-Card anzeigen
statusoptid=" " # ON - Optische Disk werden angezeigt
statustran=" " # ON - lsblk -o +TRAN, alles wird ausfuehrlich angezeigt
statusiso=" " # ON - ISOs werden angezeigt in einem Verzeichnis
statusls=" " # ON - ls Verzeichnis wird angezeigt in einem Verzeichnis
# Leerzeichen an die Befehlszeile Anpassung!
copytext="$USER@$HOSTNAME"
copyzahl=$( echo -n "$copytext" | wc -c )
copyzahl=$( expr $copyzahl - 10 )
copyspace=""
for (( k=1; k<$copyzahl; k++ )); do
copyspace="$copyspace"" "
done
function jumpto
{
label=$1
cmd=$(sed -n "/$label:/{:a;n;p;ba};" $0 | grep -v ':$')
eval "$cmd"
exit
}
start:
# Erstellen des Arrays txtlsblk um die lsblk Zeilen unten zu durchsuchen
if [ "$statusmount" == "ON" ]; then
IFS='
' txtlsblk=($(lsblk -o NAME,RM,SIZE,TRAN,MOUNTPOINT))
else
IFS='
' txtlsblk=($(lsblk -o NAME,RM,SIZE,TRAN))
fi
laengelsblk=${#txtlsblk
[*]} # Anzahl der Eintraege
# Ueberschrift - ist ja immer in null;-)
ausgabeanzahl=0
ausgabe[ausgabeanzahl]=${txtlsblk[0]}
# Alles (sda-sdh, mmcblk0, mmcblk1 und sr0 - sr3) suchen, mit und ohne optische Disk
forsuche=(sda sdb sdc sdd sde sdf sdg sdh)
if [ "$statussdcard" == "ON" ]; then
forsuche+=(mmcblk0 mmcblk1)
fi
if [ "$statusoptid" == "ON" ]; then
forsuche+=(sr0 sr1 sr2 sr3)
fi
for isuche in ${forsuche
[*]}
do
isuchelaenge=$( echo -n "$isuche" | wc -c )
if [ "$isuchelaenge" -gt "5" ]; then
echo "isuchelaenge = $isuchelaenge"
aktuellsda="$isuche"
aktuellsdalaenge="7"
isuchemount="${isuche}p1"
aktuellsdalaengemount="9"
else
aktuellsdalaenge="3"
isuchemount="${isuche}1"
aktuellsdalaengemount="4"
# suche ob sda - sdh und sr0 - sr3 vorhanden sind (ATA, USB)
aktuellsda=$(udevadm info -q property /dev/$isuche | grep -E 'ED_PATH|ID_BUS')
IFS="="
set -- $aktuellsda
aktuellsda=${2:0:$aktuellsdalaenge} # 2. Wort ($2) - Zeichen 0 bis 3
# - extern - Hervorhebung nur wenn es USB ist und MOUNTPOINT inaktiv
if [ "$aktuellsda" == "usb" ] && [ "$statusmount" != "ON" ]; then
laufwerk="- extern"
else
laufwerk=" "
fi
fi
if [ "$aktuellsda" == "ata" -o "$aktuellsda" == "usb" -o "$aktuellsda" == "mmcblk0" -o "$aktuellsda" == "mmcblk1" ]; then
# Suchen der Disk in der Array txtlsblk Tennung = IFS Blank
for (( k=0; k<$laengelsblk + 1; k++ )); do
IFS=" "
set -- ${txtlsblk[k]}
vergleich=${1:0:$aktuellsdalaenge} # 1. Wort ($1) - Zeichen 0 bis Variable
if [ "$vergleich" == "$isuche" ]; then
ausgabeanzahl=$( expr $ausgabeanzahl + 1 )
ausgabe[ausgabeanzahl]="${txtlsblk[k]} $laufwerk"
fi
done
# Bei MOUNTPOINT ON wird zusaetzlich sda1, sda2, ... gesucht
if [ "$statusmount" == "ON" ]; then
for (( k=0; k<$laengelsblk + 1; k++ )); do
IFS=" "
set -- ${txtlsblk[k]}
vergleich=${1:2:$aktuellsdalaengemount} # 1. Wort ($1) - Zeichen 2 bis Variable
if [ "$vergleich" == "$isuchemount" ]; then
ausgabeanzahl=$( expr $ausgabeanzahl + 1 )
ausgabe[ausgabeanzahl]="${txtlsblk[k]}"
fi
done
fi
fi
done
clear
echo "-----------------------------------------------------------------------------"
echo "Programm: copy.sh Knoppix 8.5 - 190222 IKa - 190731"
echo "-----------------------------------------------------------------------------"
echo " $statusmount - m - MOUNTPOINTs anzeigen $statustran - t - lsblk -o +TRAN"
echo " $statussdcard - s - SD-Card anzeigen $statusls - l - ls Files anzeigen"
echo " $statusoptid - o - Optische Disk anzeigen $statusiso - i - ISOs anzeigen"
echo "-----------------------------------------------------------------------------"
# Ausgabe
if [ "$statustran" == "ON" ]; then
lsblk -o NAME,RM,SIZE,TRAN,MOUNTPOINT
else
# Ausgabe der gesammelten Daten
for (( a=0; a<$ausgabeanzahl + 1 ; a++)); do
echo "${ausgabe[a]}"
done
fi
if [ "$statusls" == "ON" ]; then
Verzeichnis=($(pwd))
VerzSpaceZahl=$( echo -n "$Verzeichnis" | wc -c )
VerzSpaceZahl=$( expr 63 - $VerzSpaceZahl)
VerzSpace=""
for (( k=1; k<$VerzSpaceZahl; k++ )); do
VerzSpace="$VerzSpace"" "
done
echo "$VerzSpace Verzeichnis: $Verzeichnis"
ls
fi
if [ "$statusiso" == "ON" ]; then
ls -lh *.iso
fi
if [ "$finalecopy" != "ON" ]; then
echo " "
read -p "ENTER um Befehl einzugeben - oder Auswahl: " Auswahl
case "$Auswahl" in
m) if [ "$statusmount" == "ON" ]; then
statusmount=" "
else
statusmount="ON"
fi
statustran=" "
jumpto start
;;
s) if [ "$statussdcard" == "ON" ]; then
statussdcard=" "
else
statussdcard="ON"
fi
statustran=" "
jumpto start
;;
o) if [ "$statusoptid" == "ON" ]; then
statusoptid=" "
else
statusoptid="ON"
fi
statustran=" "
jumpto start
;;
t) if [ "$statustran" == "ON" ]; then
statustran=" "
else
statustran="ON"
fi
statusmount="ON"
statusoptid="ON"
statussdcard="ON"
jumpto start
;;
i) if [ "$statusiso" == "ON" ]; then
statusiso=" "
else
statusiso="ON"
fi
jumpto start
;;
l) if [ "$statusls" == "ON" ]; then
statusls=" "
else
statusls="ON"
fi
jumpto start
;;
esac
finalecopy="ON"
jumpto start
fi
echo " "
echo "$copyspace sudo dd if=/dev/s.. of=/dev/s.. bs=1M & pid=$""!"
exit 0
Wer es kuerzer und besser programmiert - bitte posten!
Wer noch Tipps hat, bitte posten.