Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Witam
potrzebuje napisac skrypcik ktory bedzie usuwal spacje z nazw katalogow i plikow. ma sie odpalac w danym katalogu i leciec rekursywnie.
dalem export QUOTING_STYLE=escape ale to tylko dziala dla ls.
lista plikow i katalogow jest bardzo duza wiec potrzebne bedzie mi najpierw listowanie katalogow ktore maja w nazwie sacje a pozniej zamiana ich.
mozna by to zrobic ls i pozniej zmieniac nawy ale musialbym wchodzic do kazdego katalogu i odpalac program
Ostatnio edytowany przez ukasz (2008-04-25 22:43:21)
Offline
find -print0 | while IFS= read -rd $'\0' f ; do mv "$f" `echo "$f" | sed -e 's; ;;g'` ; done
spróbuj coś takiego powinno pomóc :)
Pozdrawiam
Offline
zadzialalo i zgnal czyms:
mv: `.' i `./.' to ten sam plik mv: `./bekarty_diabla_cd1.avi' i `./bekarty_diabla_cd1.avi' to ten sam plik
wyglada na to ze probuje podmienic pliki ktore nie potrzebuja modyfikacji.
zapomnialem dodac ze ma zamieniac tez duze litery na male.
Ostatnio edytowany przez ukasz (2008-04-18 15:30:34)
Offline
jest to dość tępa wersja.
Zawsze możesz error przekierować do /dev/null :)
Albo możesz kopiować wszystko do innego katalogu.
co do liter to link
Offline
dzieki.
w manie grepa pisze ze mozna grepac na podstawie wyrazen regularnych. tak wiec sprobowalem. zapisalem plik z zawartoscia:
Du
asd
dr
i wydalem polecenie
cat test | grep [:upper:]
no i nic nie pokazal. z lower tak samo
ale jak dalem
cat test | grep [A-Z]
to zadzialalo
chcialbym grepnac wszystko co ma w nazwie [:blank:] ale nic sie nie dzieje.
co robie zle ?
Offline
ok juz wiem. :P nie doczytalem
trzeba takie rzeczy jak upper lower itp pisac nastepujaco:
[[:upper:]]
[[:lower:]]
itp
jescze raz dzieki za pomoc
Offline
Możesz i tak:
(Fragment większego skryptu):
for file in `dir -d * | grep .flv` ; do mv "$file" `echo "$file" | tr ' ' '_'` done
Offline
napisalem cos takiego :
#!/bin/bash set +x basepath=/root/test depth=2 x=1 while [ $x -le $depth ]; do for i in `find $basepath -maxdepth $x | grep [[:blank:]] | tr [:blank:] _ ` do echo `find $basepath -maxdepth $x | grep [[:blank:]]` trim=`echo $i | sed -e 's; ;_;g'` untrim=`echo $i | sed -e 's;_; ;g'` mv "$untrim" "$trim" echo "$untrim -> $trim" done x=$[x+1] done
katalogi w maxdepth = 1 zamienia bez problemu ale jesli jest wiecej niz 1 juz sie krzaczy
a oto co otrzymuje po wydaniu polecenia:
/root/test/sd_sd/aa aa mv: nie można wykonać stat na `/root/test/sd sd/aa aa': Nie ma takiego pliku ani katalogu /root/test/sd sd/aa aa -> /root/test/sd_sd/aa_aa
Offline
znalazlem wkoncu rozwiazanie
#!/bin/bash # Convert filenames to lowercase # and replace characters recursively ##################################### if [ -z $1 ];then echo Give target directory; exit 0;fi find "$1" -depth -name '*' | while read file ; do directory=$(dirname "$file") oldfilename=$(basename "$file") newfilename=$(echo "$oldfilename" | tr 'A-Z' 'a-z' | tr ' ' '_' | sed 's/_-_/-/g') if [ "$oldfilename" != "$newfilename" ]; then mv -i "$directory/$oldfilename" "$directory/$newfilename" echo ""$directory/$oldfilename" ---> "$directory/$newfilename"" #echo "$directory" #echo "$oldfilename" #echo "$newfilename" #echo fi done exit 0
Offline