Strona 1 z 1

bash --- szukanie plików w bieŻącym katalogu

: 03 maja 2008, 08:37
autor: dawideo
Jako prace domową muszę napisać parę prostych skryptów. Oczywiście w tych sprawach jestem laikiem :] (ale nie chcę by ktoś za mnie je napisał) tylko proszę o małą wskazówkę. Otóż zadaniem jednego z moich skryptów ma być wyszukanie plików z rozszerzeniem *.txt (i coś tam z nimi robi) w bieżącym katalogu. Do wyszukania plików użyłem:

Kod: Zaznacz cały

find -type f -printf "%p\n" | grep .txt$
Ale to polecenie znajduje (chyba) wszystkie pliki *.txt w systemie. A mi chodzi tylko o to by przeszukiwał bieżący katalog (ewentualnie podkatalogi).
Jakieś propozycje?
.

: 03 maja 2008, 08:58
autor: thalcave

Kod: Zaznacz cały

find . -type f -iname "*.txt"
to chyba wystarczy. Ta kropka zaraz po find wskazuje aktualny katalog

: 03 maja 2008, 11:38
autor: dawideo
Podziękowania wielkie, a jak zrobić aby nie podawał całej ścieżki do pliku tylko jego nazwę?

: 03 maja 2008, 15:06
autor: droopy
dawideo, użyj manuala:

Kod: Zaznacz cały

man find
ewentualnie tutaj: http://bartus.yyy.pl/files/so2/find.zip masz trochę ładniejszego manuala

btw. find . -type f -iname "*.txt" znajduje pliki nie w bieżącym katalogu, tylko w całym drzewie od bieżącego poczynając, jest opcja do ograniczenia głębokości szukania, jaka - do manuala odsyłam ;)

: 03 maja 2008, 15:52
autor: thalcave

Kod: Zaznacz cały

find . -type f -iname "*.txt" -printf "%f\n"

: 04 maja 2008, 12:09
autor: dawideo
Ok
Dzięki waszej pomocy udało mi się napisać swój 1 prosty skrypcik. No prawie :) mam jeszcze 1 mały błąd. Otóż nie działa mi "rm -i" w skrypcjie

Kod: Zaznacz cały

#!/bin/bash
# Program 
if [ $# -eq 0 ]; then
echo "Nie wybrales parametru"
elif [ $# -gt 1 ]; then
echo "Wybrales za duzo parametrow"
else
select x in w s exit

do
	case $x in
	"w") find * -type f -size -1024c -iname "*.txt" -printf "%f\n" | xargs rm -i >>dane.txt;;
	"s") find * -type f -size +1024c -iname "*.txt" | xargs tar -rf archiwum.tar; gzip archiwum.tar;;
	"exit") exit;;
	*) echo "Nie wybrano zadnej opcji opcji";;
	esac
	break
done
fi
Konsola po wpisaniu y (lub czegoś innego) wypisuje mi

Kod: Zaznacz cały

bash: y: command not found 
Natomiast ja wpisze "yes" jest jezcze gorzej konsola wypisuje same "y" jedna pod drugą:/
I totalnie nie mam pojęcia czemu:/. Według "man rm" dobrze napisałem tak mi się zdaje:/
P.s "rm -v" działa normalnie (wypisuje pliki które usuwa), to dlaczego "rm -i" nie działa??

: 01 kwietnia 2010, 12:50
autor: czarownik
Witam.
Mam problem z wyszukaniem plików, chciałbym wyszukać pliki z przed pięciu dni, ale nie tylko z 5 dnia ale też z 5, 4, 3, 2, 1 dnia włącznie w:

Kod: Zaznacz cały

man find
znalazłem coś takiego

Kod: Zaznacz cały

 find . -mtime -5 -print
ale wyświetla mi tylko pliki z datą z przed 5 dni.
Czy da się to zrobić jakoś inaczej niż:

Kod: Zaznacz cały

find . -mtime -1 -print
find . -mtime -2 -print 
find . -mtime -3 -print 
find . -mtime -4 -print 
find . -mtime -5 -print

: 01 kwietnia 2010, 16:17
autor: Czocher

: 02 kwietnia 2010, 10:13
autor: czarownik
Dziękuję działa :)