ls till sträng
- zero gravity
- Wikiadmin
- Inlägg: 2504
- Blev medlem: 15 apr 2006, 15:37
- OS: Arch Linux
- Ort: Bohuslän
- Kontakt:
ls till sträng
Håller på att göra ett shell script i bash.
Skulle behöva spara datan från ls till en sträng som jag sedan kan arbeta med. Bla vill jag kunna ta valritt filnamn ur strängen och arbeta med det.
Hur sparar jag outputen från ls i en sträng?
Hur kan jag plocka ut ett specifikt filnamn (t.ex. 3e namnet i strängen) ur sträng?
Skulle behöva spara datan från ls till en sträng som jag sedan kan arbeta med. Bla vill jag kunna ta valritt filnamn ur strängen och arbeta med det.
Hur sparar jag outputen från ls i en sträng?
Hur kan jag plocka ut ett specifikt filnamn (t.ex. 3e namnet i strängen) ur sträng?
Senast redigerad av 1 zero gravity, redigerad totalt 28 gånger.
Abusus non tollit usum
-
- Inlägg: 6191
- Blev medlem: 14 jan 2007, 19:31
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Ort: Stockholm
SV: ls till sträng
Om du vill gå igenom hela listan steg för steg så fungerar ju detta:
men annars kan du kika på arrays, se man bash.
Kod: Markera allt
for filename in *; do
echo $a
done
- mcNisse
- Inlägg: 5211
- Blev medlem: 06 feb 2007, 20:51
- OS: Debian
- Utgåva: Vet inte/ingen utgåva passar
SV: ls till sträng
Har du filer som innehåller mellanslag är du ute på halt vatten med lösningen ovan... Jag tror att arrayer kan lösa ditt problem, om du har mellanslag i namn. Men jag har inte använt dem... tyvär.
Edit: Lösning för att hantera filnamn med mellanslag: filnamn=$(ls -Q)
Edit: Lösning för att hantera filnamn med mellanslag: filnamn=$(ls -Q)
Senast redigerad av 1 mcNisse, redigerad totalt 28 gånger.
KDE 4.5 SC är ute i det fria!!! Tjoho
Stagnation is good for nobody - after all if you don't progress you end up with gnome
Stagnation is good for nobody - after all if you don't progress you end up with gnome
- zero gravity
- Wikiadmin
- Inlägg: 2504
- Blev medlem: 15 apr 2006, 15:37
- OS: Arch Linux
- Ort: Bohuslän
- Kontakt:
SV: ls till sträng
Tog en titt på arrays och de funkade fin fint.
exempelvis:
LS=( `ls` )
echo ${LS[5]}
exempelvis:
LS=( `ls` )
echo ${LS[5]}
Abusus non tollit usum
-
- Inlägg: 6191
- Blev medlem: 14 jan 2007, 19:31
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Ort: Stockholm
SV: ls till sträng
Min lösning ovan fungerar faktiskt utmärkt med mellanslag i namnen, prova 
Så här kan man göra med en array:

Så här kan man göra med en array:
Kod: Markera allt
#!/bin/bash
fillista=("*")
echo ${fillista[0]}
echo ${fillista[1]}
for filnamn in ${fillista[*]}; do
echo $filnamn
done
- mcNisse
- Inlägg: 5211
- Blev medlem: 06 feb 2007, 20:51
- OS: Debian
- Utgåva: Vet inte/ingen utgåva passar
SV: ls till sträng [LÖST]
Där ser man. Kul att lära sig något nytt
Tyvär fungerar inte Zeros lösning för filer med mellanslag...
Jag får heller inte lösningen med ls -Q att furgera...
Så här gör jag
och får denna lista
Gör jag så här istället
blir resultatet det mer väntade:
Och skapas f som du beskriver blir resultatet helt rätt. Vad är det som gör att man får så vansinnigt många rader i mitt första fall?

Tyvär fungerar inte Zeros lösning för filer med mellanslag...
Jag får heller inte lösningen med ls -Q att furgera...
Så här gör jag
Kod: Markera allt
mkdir slask
cd slask
touch foo bar "foo bar"
f=$(ls -Q)
for d in ${f[*]};do echo $d;done
Kod: Markera allt
"bar"
"foo"
"foo
bar"
"foo"
"foo
bar"
Kod: Markera allt
for d in $f; do echo $d; done
Kod: Markera allt
"bar"
"foo"
"foo
bar"
KDE 4.5 SC är ute i det fria!!! Tjoho
Stagnation is good for nobody - after all if you don't progress you end up with gnome
Stagnation is good for nobody - after all if you don't progress you end up with gnome
- zero gravity
- Wikiadmin
- Inlägg: 2504
- Blev medlem: 15 apr 2006, 15:37
- OS: Arch Linux
- Ort: Bohuslän
- Kontakt:
SV: ls till sträng
Markerade tråden som olöst igen då jag antagligen kommer få mer problem 

Abusus non tollit usum
- zero gravity
- Wikiadmin
- Inlägg: 2504
- Blev medlem: 15 apr 2006, 15:37
- OS: Arch Linux
- Ort: Bohuslän
- Kontakt:
SV: ls till sträng
Efter mkt om och men så börjar mitt script bli klart. Har dock ett problem, tabbar i echo.
Skulle $filnamn vara väldigt långt så hamnar tabben fel. Finns det något sätt att ändra \t längden?
Kod: Markera allt
#!/bin/bash
fillista=("*")
for filnamn in ${fillista[*]}; do
echo -e "$filnamn \t ettord"
done
Abusus non tollit usum
- Konservburk
- Inlägg: 5919
- Blev medlem: 07 apr 2007, 22:28
SV: ls till sträng
Använd printf istället för echo...zero gravity skrev: Skulle $filnamn vara väldigt långt så hamnar tabben fel. Finns det något sätt att ändra \t längden?
Kod: Markera allt
fillista=("*")
for filnamn in ${fillista[*]}; do
test ${tablength-0} -lt ${#filnamn} && tablength=${#filnamn}
done
for filnamn in ${fillista[*]}; do
printf "%-*s %s\n" $tablength "$filnamn" "ettord"
done
Du kan skippa den och välja ett eget värde på $tablength om du vill.
- zero gravity
- Wikiadmin
- Inlägg: 2504
- Blev medlem: 15 apr 2006, 15:37
- OS: Arch Linux
- Ort: Bohuslän
- Kontakt:
SV: ls till sträng
Vilket underbart kommando 
Finns bara ett problem:
Innehåller $filnamn åäö så räknas dessa bort. Hur fixar jag detta?
Ex.

Finns bara ett problem:
Innehåller $filnamn åäö så räknas dessa bort. Hur fixar jag detta?
Ex.
Kod: Markera allt
"%-20s %s\n" "öåärnen" "ord1" && printf "%-20s %s\n" "oaarnen" "ord1"
öåärnen ord1
oaarnen ord1
Senast redigerad av 1 zero gravity, redigerad totalt 29 gånger.
Abusus non tollit usum
- Konservburk
- Inlägg: 5919
- Blev medlem: 07 apr 2007, 22:28
SV: ls till sträng
Det låter som att printf inte är kompis med utf-8.zero gravity skrev:Kod: Markera allt
"%-20s %s\n" "öåärnen" "ord1" && printf "%-20s %s\n" "oaarnen" "ord1" öåärnen ord1 oaarnen ord1
Testa om det är det som är problemet mha iconv...
Kod: Markera allt
for i in *; do
i="$(echo $i | iconv -f UTF-8 -t ISO-8859-1)"
printf "%-20s %s\n" "$i" "ord1" | iconv -f ISO-8859-1 -t UTF-8
done
Det här skulle också kunna fungera:
Kod: Markera allt
export LC_ALL=C
for i in *; do
printf "%-*s %s\n" $((${#i}+15)) "$i" "ord1"
done
Senast redigerad av 1 Konservburk, redigerad totalt 29 gånger.