Síða 1 af 1

losna við bil í skráarnöfnum

Sent: Fim 10. Nóv 2011 17:11
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.

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

Sent: Fim 10. Nóv 2011 19:17
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

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

Sent: Fim 10. Nóv 2011 20:08
af worghal
vá ég last þetta sem "losna við bíl í skráningarnöfnum" :happy

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

Sent: Fim 10. Nóv 2011 20:41
af Sphinx
worghal skrifaði:vá ég last þetta sem "losna við bíl í skráningarnöfnum" :happy


haha ég líka :happy

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

Sent: Fös 11. Nóv 2011 14:39
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í.

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

Sent: Fös 11. Nóv 2011 14:41
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

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

Sent: Fös 11. Nóv 2011 16:57
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.

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

Sent: Fös 11. Nóv 2011 17:58
af Haxdal
hm .. grunar kannski að þú sért að tala um fyrir Windows .. en þetta drasl sem ég peistaði er fyrir Linux :-"

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

Sent: Fös 11. Nóv 2011 18:21
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...

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

Sent: Fös 11. Nóv 2011 19:00
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.

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

Sent: Fös 11. Nóv 2011 21:07
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

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

Sent: Lau 12. Nóv 2011 01:08
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

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

Sent: Lau 12. Nóv 2011 04:33
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

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

Sent: Lau 12. Nóv 2011 12:53
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.