Próbuję ls jakieś pliki ze wzorem w katalogu. Chcę tylko zeskanować pierwszy poziom, a nie rekurencyjny.
Mój skrypt:
for i in $(ls $INCOMINGDIR/*$BUSSINESSDATE*)
do
echo $i;
done
Powyższe polecenie skanuje rekurencyjnie. Jak to zrobić, aby skanować tylko katalog pierwszego poziomu?
bash
shell-script
ls
Sas
źródło
źródło
printf %s\\n "$INCOMINGDIR/"*"$BUSINESSDATE"*
Odpowiedzi:
Nie parsuj
ls
. Również nie używać ALL_CAPS_VARSInteraktywnie
ls
ma-d
opcję, która uniemożliwia zejście do podkatalogów:źródło
"${i}"
. Nigdy nie wiesz, co może byći
.my_file.doc[newline]another_persons_file.doc
i mieć nadzieję, że niektóre skrypty mogą spróbować „rm”, co uważa za 2 nazwy plików ... Link Glenna jest koniecznością do przeczytania (na mywiki.wooledge.org każdy powinien przeczytać cała FAQ, a także strona pułapek)ls -d .*
Nie ma powodu, dla którego to polecenie powinno być rekurencyjne. Ale jeśli
$INCOMINGDIR/*$BUSSINESSDATE*
pasuje do katalogu, wówczas zawartość tego katalogu jest wyświetlana zamiast samego katalogu. Ale nie byłoby rekurencji poza tym poziomem.Użyj tego polecenia, aby uniknąć tego efektu:
for ... in
polecenia zls
wyjściem są ryzykowne.Ogólnie
find
wydaje się lepsze rozwiązanie lubźródło