Witam.
Moim zadaniem jest napisanie skryptu, ktory przyjmuje jako parametr maske nazwy pliku (np. "*.txt") i usuwa takie pliki (w katalogu bieżącym).
Próbowałem to robić na wiele różnych sposobów i skrypty działają jedynie wtedy, gdy w katalogu bieżącym znajduje się tylko jeden plik spełniający warunki maski. Gdy w katalogu znajdują się dwa pliki z rozszerzeniem np. *.txt, to skrypt przestaje działać.
Moje pomysły na skrypty to:
1)
#!/bin/bash
find . -iname "$1" | xargs rm
(z linii poleceń działa dla wszystkich plików - w skrypcie tylko dla jednego)
2)
#!/bin bash
find . -iname "$1" -exec rm -f {} \\;
3) Nawet próbowałem bawić się w usuwanie plików, które pasują do wzorca:
#!/bin/bash
zm="$1"
zm2=`cat temp | cut -f2 -d "."`
rm -f temp
zm3=.
zm4=$zm3$zm2
zm5=`ls -l | grep $zm4 | tr -s " " | cut -f2 -d "." | head -n1`
zm6="*."
zm7=$zm6$zm5
for plik in *
do
if [ $plik == "$zm7" ]
then
rm -f $plik
else
echo "Plik nie pasuje"
fi
done
W trzecim skrypcie chciałem uzyskać coś takiego:
zm=*.txt
zm2=txt (zapisanie *.txt do pliku i wycięcie samego txt)
zm3=.
zm4=.txt
zm5=txt (wydobycie końcówki nazwy pliku z katalogu bieżącego, który pasuje do wzorca przekazanego w parametrze skryptu)
zm6=*.
zm7=*.txt
I potem w pętli for sprawdzenie, czy nazwa obecnie czytanego pliku jest równa wzorcowi. I tu pojawia się problem.
Załóżmy, że w katalogu znajdują się pliki 1.txt 2.txt itd.
$plik == "$zm7"
System zamieni to na:
1.txt == *.txt" I wywali, że nazwy plików nie są równe. W tym miejscu chciałbym móc porównać 1.txt z WZORCEM *.txt
Chciałbym, żeby "*" była uważana za dowolny ciąg znaków, a nie jako znak "*".
Innych pomysłów na wykonanie tego skryptu nie mam... Chciałbym dostać od Was jakieś wskazówki lub chociaż podpowiedź, dlaczego skrypt sypie się na większej liczbie plików pasujących niż 1.