Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
tilloo3
- Beiträge: 43
- Registriert: 04.05.2013 17:21:04
Beitrag
von tilloo3 » 23.06.2015 11:31:40
Hallo Leute,
vorab hier schonmal das Script
Code: Alles auswählen
#! /bin/bash
target=/home/csgo/game/output
cs=/home/csgo/game/csgo-deagle1
exclude=( "*.conf" "*.cfg" "*txt" "*.ini" "*.smx" "*.mp3" "*.sh" )
for file in ${cs}; do
for (( index = 0; index < ${#exclude[@]}; index++ )); do
if [[ ${file} != ${exclude[${index}]} ]]; then
ln -s ${file} ${target}
elif [[ ${file} == ${exclude[${index}]} ]]; then
cp ${file} ${target}
fi
done
done
ich möchte mit diesem Script Symlinks von allen Dateien im Ordner erzeugen, ausser die Dateien die oben im Exlude stehen das heisst z.B bla.cfg soll nicht gesymlinked werden sondern einfach kopiert werden.
Das Problem ist jetzt aber das wenn ich das Script ausführe wird zwar ein Symlink vom Ordner gemacht aber alle Dateien dadrin werden einfach in das Output Verzeichnis kopiert.
Danke im Vorraus ! :=)
Zuletzt geändert von
tilloo3 am 05.07.2015 21:25:25, insgesamt 2-mal geändert.
-
linuxCowboy
- Beiträge: 287
- Registriert: 05.02.2013 19:47:41
Beitrag
von linuxCowboy » 25.06.2015 18:31:44
zum Beispiel:
Code: Alles auswählen
#!/bin/bash
target=/home/csgo/game/output
cs=/home/csgo/game/csgo-deagle1
IFS=$'\n'
for f in `find $cs -type f`; do
if [[
$f == *.conf ||
$f == *.cfg ||
$f == *txt ||
$f == *.ini ||
$f == *.smx ||
$f == *.mp3 ||
$f == *.sh
]]; then
echo -n "copy: "; cp -v "$f" $target
else
echo -n "link: "; ln -sfv "$f" $target
fi
done | sort
Syntax:
38637
-der_linux_cowboy --- Besser werden! ... f*** w$$
-
rendegast
- Beiträge: 15041
- Registriert: 27.02.2006 16:50:33
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von rendegast » 25.06.2015 20:29:45
cs=/home/csgo/game/csgo-deagle1
...
for file in ${cs}; do
...
done
In der Art Enthält $file nur einmal den Wert /home/csgo/game/csgo-deagle1.
$file enthält so nie den Namen einer Datei IN /home/csgo/game/csgo-deagle1.
Die Tests schlagen fehl.
Eher
Um besser gegen Leerzeichen gewappnet zu sein vielleicht
Code: Alles auswählen
...
ls -1 ${cs} | while read file; do
... echo "$file"
Gegen Dateinamen über eine Zeile dann vielleicht irgendwas mit 'find',
bei dem wiederum direkt ein exclude-Filter gesetzt werden kann, '! -name "*.txt"'.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
-
tilloo3
- Beiträge: 43
- Registriert: 04.05.2013 17:21:04
Beitrag
von tilloo3 » 26.06.2015 07:53:35
Danke für eure Antworten !
#!/bin/bash
target=/home/csgo/game/output
cs=/home/csgo/game/csgo-deagle1
IFS=$'\n'
for f in `find $cs -type f`; do
if [[
$f == *.conf ||
$f == *.cfg ||
$f == *txt ||
$f == *.ini ||
$f == *.smx ||
$f == *.mp3 ||
$f == *.sh
]]; then
echo -n "copy: "; cp -v "$f" $target
else
echo -n "link: "; ln -sfv "$f" $target
fi
done | sort
Das hat mir echt weitergeholfen ! Jetzt werden zumindest alle Dateien (auch in den Subordnern) gesymlinked oder kopiert.
Jetzt habe ich nur noch ein Problem.
Gibt es einen Weg die Ordnerstruktur des Hauptordners beizubehalten ?
Momentan werden einfach alle Files zusammen in den Output Ordner geworfen.
-
rendegast
- Beiträge: 15041
- Registriert: 27.02.2006 16:50:33
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von rendegast » 26.06.2015 15:30:58
Irgendwo habe ich mal ein Programm/Option gesehen, daß nur den Verzeichnisbaum kopiert.
rsync?
Alternativlösung:,
'lndir' aus
xutils-dev,
danach alle ungewünschten Links löschen, danach leere Verzeichnisse per 'rmdir -p'.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
-
tilloo3
- Beiträge: 43
- Registriert: 04.05.2013 17:21:04
Beitrag
von tilloo3 » 26.06.2015 18:26:59
Irgendwo habe ich mal ein Programm/Option gesehen, daß nur den Verzeichnisbaum kopiert.
rsync?
Ja damit sollte es denke ich mal funktioneren aber es wäre "gut" wenn man das schon in das Beispiel von @linuxCowboy integrieren könnte.
Prinzipiell sollte das doch nicht so schwer sein oder ?
-
rendegast
- Beiträge: 15041
- Registriert: 27.02.2006 16:50:33
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von rendegast » 26.06.2015 20:22:21
rendegast hat geschrieben:
Irgendwo habe ich mal ein Programm/Option gesehen, daß nur den Verzeichnisbaum kopiert.
rsync?
Ups, Sorry, direkt war das windows
Unter linux finde ich gerade nur Sachen mit einem Zwischenschritt, sowas wie
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
-
tilloo3
- Beiträge: 43
- Registriert: 04.05.2013 17:21:04
Beitrag
von tilloo3 » 29.06.2015 20:31:13
Unter linux finde ich gerade nur Sachen mit einem Zwischenschritt, sowas wie
CODE: ALLES AUSWÄHLEN
lndir ...; find ... -type l -delete;
Puhh Okay ich habe mir das mal angeschaut aber da blicke ich echt nicht durch ....
Könnte denn kein Bash-Guru das mal schnell in das Script hier zaubern ?
Wäre euch echt dankbar bin langsam verzweifeln ^^
-
linuxCowboy
- Beiträge: 287
- Registriert: 05.02.2013 19:47:41
Beitrag
von linuxCowboy » 02.07.2015 22:03:38
Simsalabim!
Code: Alles auswählen
#!/bin/bash
target=${1-/home/csgo/game/output} # param 1
cs=${2-/home/csgo/game/csgo-deagle1} # param 2
mkdir -p "$target"
[[ ! -d $cs || ! -d $target ]] && echo "not 2 dirs" && exit 1
find "$cs" -type f |
while read f; do
filepath=$f
[[ $filepath =~ ^\.*/(.*) ]] && filepath=${BASH_REMATCH[1]}
if [[ $filepath =~ / ]]; then
filepath=${filepath%/*}
else
filepath=
fi
mkdir -p "${target%/}/$filepath"
if [[
$f == *.conf ||
$f == *.cfg ||
$f == *txt ||
$f == *.ini ||
$f == *.smx ||
$f == *.mp3 ||
$f == *.sh
]]; then
echo -n "copy: "
cp -v "$f" "${target%/}/$filepath"
else
echo -n "link: "
ln -sfv "$f" "${target%/}/$filepath"
fi
done | sort
Syntax:
38658
-der_linux_cowboy --- Besser werden! ... f*** w$$
-
tilloo3
- Beiträge: 43
- Registriert: 04.05.2013 17:21:04
Beitrag
von tilloo3 » 05.07.2015 21:24:30
Simsalabim!
Vieeeellleeen Dank !! Tolle Zauberei *_*