losna við bil í skráarnöfnum

Svara
Skjámynd

Höfundur
bjarkih
Nörd
Póstar: 108
Skráði sig: Þri 16. Feb 2010 17:55
Staða: Ótengdur

losna við bil í skráarnöfnum

Póstur af bjarkih »

fann á netinu hvernig á að breyta skráarnöfnum í Linux til að losna við bil í skráarnöfnum:

Kóði: Velja allt

rename -v 's/\ /\_/g' *
Vandamálið er að rename er ekki með -r option til að gera þetta í gegnum öll undir directory, væri þægilegt að fá ábendingu um lausn.
Skjámynd

Haxdal
Tölvutryllir
Póstar: 640
Skráði sig: Lau 14. Apr 2007 18:58
Staða: Ótengdur

Re: losna við bil í skráarnöfnum

Póstur af Haxdal »

Þetta ætti að virka. Finnur allar skrár og geymir undir files, fer svo í gegnum hverja fyrir sig, athugar hvort það sé directory eða skrá (test -d) og ef það er directory þá keyrir það rename skipunina í directoryinu.
#!/bin/bash
files="$(find . | grep './')"

for file in $files
do
if test -d $file
then
`rename -v 's/\ /\_/g' "$file/"*`
fi
done
Atvinnunörd - Part of the 2%
> FX8350 | Gigabyte 990FXA-UD3 | Nvidia GTX 760 | 8GB Somethingsomething | Corsair Graphite 600T <
Skjámynd

worghal
Kóngur
Póstar: 6079
Skráði sig: Sun 11. Mar 2007 14:00
Staðsetning: fyrir aftan þig
Staða: Ótengdur

Re: losna við bil í skráarnöfnum

Póstur af worghal »

vá ég last þetta sem "losna við bíl í skráningarnöfnum" :happy
CPU: Intel Core i7 6700K MB: Asrock Z170 Extreme4 GPU: Asus GTX 980 Strix RAM: Corsair Vengeance LPX 2x8gb 3200Mhz CPU Cooler: Noctua NH-D14 Sound: Asus Xonar STX - HD380PRO - Yamaha HS7 CASE: Bitfenix Shinobi XL

Sphinx
1+1=10
Póstar: 1186
Skráði sig: Mán 11. Maí 2009 21:06
Staða: Ótengdur

Re: losna við bil í skráarnöfnum

Póstur af Sphinx »

worghal skrifaði:vá ég last þetta sem "losna við bíl í skráningarnöfnum" :happy
haha ég líka :happy
MSI GX640 / 15,4" 1680x1050 / Intel Quad I5 2,27GHz / ATI HD5850 1GB / DDR3 2x2GB / seagate 500GB / windows 7 ultimate
Skjámynd

Höfundur
bjarkih
Nörd
Póstar: 108
Skráði sig: Þri 16. Feb 2010 17:55
Staða: Ótengdur

Re: losna við bil í skráarnöfnum

Póstur af bjarkih »

Haxdal skrifaði:Þetta ætti að virka. Finnur allar skrár og geymir undir files, fer svo í gegnum hverja fyrir sig, athugar hvort það sé directory eða skrá (test -d) og ef það er directory þá keyrir það rename skipunina í directoryinu.
#!/bin/bash
files="$(find . | grep './')"

for file in $files
do
if test -d $file
then
`rename -v 's/\ /\_/g' "$file/"*`
fi
done
Takk fyrir svarið en þetta gerir ekki það sem ég er að sækjast eftir, að framkvæma rename skipunina með þessum options í gegnum skráarsafnið, t.d. Music eða Videos og allt sem er undir því.
Skjámynd

GuðjónR
Stjórnandi
Póstar: 15436
Skráði sig: Fim 29. Ágú 2002 18:46
Staðsetning: Hérna
Hafðu samband:
Staða: Ótengdur

Re: losna við bil í skráarnöfnum

Póstur af GuðjónR »

Sphinx skrifaði:
worghal skrifaði:vá ég last þetta sem "losna við bíl í skráningarnöfnum" :happy
haha ég líka :happy
WTF....ég las það líka þannig :wtf
Skjámynd

Haxdal
Tölvutryllir
Póstar: 640
Skráði sig: Lau 14. Apr 2007 18:58
Staða: Ótengdur

Re: losna við bil í skráarnöfnum

Póstur af Haxdal »

bjarkih skrifaði:
Haxdal skrifaði:Þetta ætti að virka. Finnur allar skrár og geymir undir files, fer svo í gegnum hverja fyrir sig, athugar hvort það sé directory eða skrá (test -d) og ef það er directory þá keyrir það rename skipunina í directoryinu.
#!/bin/bash
files="$(find . | grep './')"

for file in $files
do
if test -d $file
then
`rename -v 's/\ /\_/g' "$file/"*`
fi
done
Takk fyrir svarið en þetta gerir ekki það sem ég er að sækjast eftir, að framkvæma rename skipunina með þessum options í gegnum skráarsafnið, t.d. Music eða Videos og allt sem er undir því.
huh ?..
þetta á að gera nákvæmlega það, finnur allar möppur sem eru í directoryinu sem þú keyrir shell scriptuna í og framkvæmir rename skipunina þína í þeim.
Atvinnunörd - Part of the 2%
> FX8350 | Gigabyte 990FXA-UD3 | Nvidia GTX 760 | 8GB Somethingsomething | Corsair Graphite 600T <
Skjámynd

Haxdal
Tölvutryllir
Póstar: 640
Skráði sig: Lau 14. Apr 2007 18:58
Staða: Ótengdur

Re: losna við bil í skráarnöfnum

Póstur af Haxdal »

hm .. grunar kannski að þú sért að tala um fyrir Windows .. en þetta drasl sem ég peistaði er fyrir Linux :-"
Atvinnunörd - Part of the 2%
> FX8350 | Gigabyte 990FXA-UD3 | Nvidia GTX 760 | 8GB Somethingsomething | Corsair Graphite 600T <

coldcut
Vaktari
Póstar: 2192
Skráði sig: Mið 21. Nóv 2007 02:25
Staðsetning: /dev/random
Staða: Ótengdur

Re: losna við bil í skráarnöfnum

Póstur af coldcut »

Haxdal skrifaði:hm .. grunar kannski að þú sért að tala um fyrir Windows .. en þetta drasl sem ég peistaði er fyrir Linux :-"
mig grunar nú frekar að hann sé að keyra skipunina í vitlausri möppu...
Skjámynd

Höfundur
bjarkih
Nörd
Póstar: 108
Skráði sig: Þri 16. Feb 2010 17:55
Staða: Ótengdur

Re: losna við bil í skráarnöfnum

Póstur af bjarkih »

Í vitlausri möppu??? sorry en það á ekki að skipta neinu máli í hvaða möppu skrárnar eru, ég bjó til temp directory með nokkrum skrám sem voru með bil í skráarnöfnunum og svo bjó ég til directory undir því sem innihélt líka skrár með bil í nöfnunum. keyrði síðan scriptið ( ./script ) og ekkert gerðist.
Skjámynd

Haxdal
Tölvutryllir
Póstar: 640
Skráði sig: Lau 14. Apr 2007 18:58
Staða: Ótengdur

Re: losna við bil í skráarnöfnum

Póstur af Haxdal »

Var ekki alveg nógu robust scriptan hjá mér. Fer eftir hvað þú ert með í IFS og ` var að virka eitthvað asnalega.

En þessi ætti að virka miðað við test hjá mér, einfaldaði hana líka þegar ég fattaði að type virkar með find :)

Kóði: Velja allt

#!/bin/bash
# Geymum IFS
OLDIFS=$IFS
IFS="$(printf '\n\t')"

dirs="$(find -type d)"
root=$(pwd)

for dir in $dirs
do
cd "$root/$dir"
rename -v 's/\ /\_/g' *
done

# restoreum IFS
IFS=$OLDIFS
Dæmi um keyrslu hjá mér.
foo@nemesis:~/spacetest$ find .
.
./file 2
./file 1
./dir3
./dir3/dir6
./dir3/dir6/dir7
./dir3/dir6/dir7/file 11
./dir3/dir6/dir7/file 12
./file 3
./dir1
./dir1/dir4
./dir1/dir4/file file file 6
./dir1/dir4/file 5
./dir1/dir5
./dir1/dir5/file 8
./dir1/dir5/file 7
./dir1/file 4
./dir2
./dir2/file 9
./dir2/file 10

foo@nemesis:~/spacetest$ cat test.sh
#!/bin/bash
# Geymum IFS
OLDIFS=$IFS
IFS="$(printf '\n\t')"

dirs="$(find -type d)"
root=$(pwd)

for dir in $dirs
do
cd "$root/$dir"
rename -v 's/\ /\_/g' *
done

# restoreum IFS
IFS=$OLDIFS

foo@nemesis:~/spacetest$ sh test.sh
file 1 renamed as file_1
file 2 renamed as file_2
file 3 renamed as file_3
file 11 renamed as file_11
file 12 renamed as file_12
file 4 renamed as file_4
file 5 renamed as file_5
file file file 6 renamed as file_file_file_6
file 7 renamed as file_7
file 8 renamed as file_8
file 10 renamed as file_10
file 9 renamed as file_9

foo@nemesis:~/spacetest$ find .
.
./file_1
./dir3
./dir3/dir6
./dir3/dir6/dir7
./dir3/dir6/dir7/file_11
./dir3/dir6/dir7/file_12
./file_2
./dir1
./dir1/dir4
./dir1/dir4/file_file_file_6
./dir1/dir4/file_5
./dir1/file_4
./dir1/dir5
./dir1/dir5/file_7
./dir1/dir5/file_8
./dir2
./dir2/file_9
./dir2/file_10
./file_3
Atvinnunörd - Part of the 2%
> FX8350 | Gigabyte 990FXA-UD3 | Nvidia GTX 760 | 8GB Somethingsomething | Corsair Graphite 600T <
Skjámynd

Höfundur
bjarkih
Nörd
Póstar: 108
Skráði sig: Þri 16. Feb 2010 17:55
Staða: Ótengdur

Re: losna við bil í skráarnöfnum

Póstur af bjarkih »

virkaði betur en gat ekki breytt nöfnum á skrám í undir directory,

Kóði: Velja allt

cd: 13: can't cd to /home/bjarki/temp/./d d
Skjámynd

Haxdal
Tölvutryllir
Póstar: 640
Skráði sig: Lau 14. Apr 2007 18:58
Staða: Ótengdur

Re: losna við bil í skráarnöfnum

Póstur af Haxdal »

Fleh.
Rename skipunin þín renamear líka directoryum, svo ef þaðeru directory með bili í nafninu þá er því directoryi renameað ásamt öllum skránum og þ.a.l. eru upplýsingarnar í arrayinu ekki réttar lengur ](*,)

Svona, hérna er scripta sem renamear bara skrám, sleppir öllum directoryum.

Kóði: Velja allt

#!/bin/bash
IFS="$(printf '\n\t')"

dirs="$(find -type d)"
root=$(pwd)

for dir in $dirs
do

toDir=$(echo "$root/$dir/" | sed 's/ /\\ /g')

eval cd $toDir

files="$(find -maxdepth 1 -type f)"
for file in $files
do

rename -v 's/\ /\_/g' "$file"
done

done

# restoreum IFS
IFS=$OLDIFS
Result af local testi hjá mér:
foo@nemesis:~/spacetest$ find .
.
./file 2
./file 1
./dir3
./dir3/dir6
./dir3/dir6/dir7
./dir3/dir6/dir7/file 11
./dir3/dir6/dir7/file 12
./file 3
./dir1
./dir1/dir4
./dir1/dir4/file file file 6
./dir1/dir4/file 5
./dir1/dir5
./dir1/dir5/file 8
./dir1/dir5/file 7
./dir1/file 4
./dir2
./dir2/file 9
./dir2/file 10
./fir foo
./fir foo/file 16
./fir foo/file 15
./test.sh
./fir fir
./fir fir/file 13
./fir fir/file 14

foo@nemesis:~/spacetest$ sh test.sh
./file 2 renamed as ./file_2
./file 1 renamed as ./file_1
./file 3 renamed as ./file_3
./file 11 renamed as ./file_11
./file 12 renamed as ./file_12
./file 4 renamed as ./file_4
./file file file 6 renamed as ./file_file_file_6
./file 5 renamed as ./file_5
./file 8 renamed as ./file_8
./file 7 renamed as ./file_7
./file 9 renamed as ./file_9
./file 10 renamed as ./file_10
./file 16 renamed as ./file_16
./file 15 renamed as ./file_15
./file 13 renamed as ./file_13
./file 14 renamed as ./file_14

foo@nemesis:~/spacetest$ find .
.
./file_1
./dir3
./dir3/dir6
./dir3/dir6/dir7
./dir3/dir6/dir7/file_11
./dir3/dir6/dir7/file_12
./file_2
./dir1
./dir1/dir4
./dir1/dir4/file_file_file_6
./dir1/dir4/file_5
./dir1/file_4
./dir1/dir5
./dir1/dir5/file_7
./dir1/dir5/file_8
./dir2
./dir2/file_9
./dir2/file_10
./file_3
./fir foo
./fir foo/file_15
./fir foo/file_16
./test.sh
./fir fir
./fir fir/file_14
./fir fir/file_13
Atvinnunörd - Part of the 2%
> FX8350 | Gigabyte 990FXA-UD3 | Nvidia GTX 760 | 8GB Somethingsomething | Corsair Graphite 600T <
Skjámynd

Höfundur
bjarkih
Nörd
Póstar: 108
Skráði sig: Þri 16. Feb 2010 17:55
Staða: Ótengdur

Re: losna við bil í skráarnöfnum

Póstur af bjarkih »

Þakka þér fyrir :D það þarf greinilega að leggja töluvert á sig til að taka allar skrár og directory og breyta þeim.
Svara