Ich führe auf dem Server einen Befehl aus, der die Arbeitsstationen in einem Ordner auflistet.
Basierend auf den ersten drei Zeichen des Arbeitsstationsnamens möchte ich die Arbeitsstation vom aktuellen Ordner in einen neuen Ordner verschieben.
Der Befehl zman wl /Workstation/Build
würde also die Arbeitsstationen im Build-Ordner wie folgt auflisten.
/Workstation/Build/red-001
/Workstation/Build/sci-001
/Workstation/Build/shs-001
Jetzt habe ich eine Definitionsdatei, die mir anhand der ersten drei Zeichen des Arbeitsstationsnamens sagt, wohin ich die Arbeitsstation verschieben soll.
red /Workstation/Staff/Red
sci /Workstation/Staff/Sci
shs /Workstation/Staff/Shs
Ich bin also auf der Suche nach einem Skript oder Befehl, der die Arbeitsstationen im Ordner „Von“ auflistet und dann die ersten drei Zeichen des Arbeitsstationsnamens in der Definitionsdatei nachschlägt, um den Ordner „An“ zu finden und die Arbeitsstation dorthin zu verschieben.
Der Verschiebebefehl wäre:
zman wmv /Workstation/Build/Red-001 /Workstation/Staff/Red
Antwort1
Das geht zum Beispiel mit einem Oneliner wie diesem:
while read -r WORKSTATION; do echo "$WORKSTATION" "$(grep "$(basename "$WORKSTATION" | head -c 3)" "$TO_FILE_PATH" | cut -d' ' -f2)"; done < from_file
Die Ausgabe wäre:
/Workstation/Build/red-001 /Workstation/Staff/Red
/Workstation/Build/sci-001 /Workstation/Staff/Sci
/Workstation/Build/shs-001 /Workstation/Staff/Shs
WORKSTATION
ist nur ein Name für die Variable, die jedesArbeitsstationspfadfür jede Iteration der While-Schleife. TO_FILE_PATH
ist der Pfad dieser Datei:
red /Workstation/Staff/Red
sci /Workstation/Staff/Sci
shs /Workstation/Staff/Shs
und from_file
ist eine Datei, die Folgendes enthält:
/Workstation/Build/red-001
/Workstation/Build/sci-001
/Workstation/Build/shs-001
Sie können auch ein Bash-Skript move_worksations.sh
wie dieses verwenden:
FROM_FILE_PATH="$1"
TO_FILE_PATH="$2"
WORKSTATION_NUMBER=0
while read -r WORKSTATION
do
WORKSTATIONS["$WORKSTATION_NUMBER"]=""$WORKSTATION" "$(grep "$(basename "$WORKSTATION" | head -c 3)" "$TO_FILE_PATH" | cut -d' ' -f2)""
((WORKSTATION_NUMBER++))
done < "$FROM_FILE_PATH"
for WS_SOURCE_TARGET in "${WORKSTATIONS[@]}"
do zman wmv "$WS_SOURCE_TARGET"
done
Und dann verwenden Sie move_worksations.sh
folgendermaßen:
./move_worksations.sh from_file to_file
Hinweis: Denken Sie daran, move_worksations.sh
die Ausführungsberechtigung zu erteilen:chmod u+x move_worksations.sh