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/.

Użytkownik


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

Członek DUG


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

Użytkownik


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

Członek DUG


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

Użytkownik


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

Użytkownik


ok juz wiem. :P nie doczytalem
trzeba takie rzeczy jak upper lower itp pisac nastepujaco:
[[:upper:]]
[[:lower:]]
itp
jescze raz dzieki za pomoc

Offline
Użytkownik

Możesz i tak:
(Fragment większego skryptu):
for file in `dir -d * | grep .flv` ; do mv "$file" `echo "$file" | tr ' ' '_'` done
Offline

Użytkownik


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]
donekatalogi 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

Użytkownik


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