Jak ls bez rekurencji


19

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?


printf %s\\n "$INCOMINGDIR/"*"$BUSINESSDATE"*
mikeserv

Odpowiedzi:


39

Nie parsujls . Również nie używać ALL_CAPS_VARS

for i in "$incoming_dir"/*"$business_date"*; do

Interaktywnie lsma -dopcję, która uniemożliwia zejście do podkatalogów:

ls -d $INCOMINGDIR/*$BUSSINESSDATE*

Dzięki za informacje, zamierzam teraz tworzyć pliki z nowymi wierszami w nazwie, aby zirytować teraz sysadmins.
Petah

Właśnie dlatego używa inteligentnego sysadmin / programisty "${i}". Nigdy nie wiesz, co może być i.
Ricky Beam

@Petah: lub ktoś o złych zamiarach mógłby utworzyć plik o nazwie my_file.doc[newline]another_persons_file.doci 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)
Olivier Dulac

1
chłodny. nie znałem opcji -d!
dokaspar

Świetny! Działa to również w przypadku prostszych rzeczy. Takich jak lista wszystkich plików z kropką:ls -d .*
Wassadamo,

8

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:

ls -d "$INCOMINGDIR/"*"$BUSSINESSDATE"*

for ... inpolecenia z lswyjściem są ryzykowne.

Ogólnie findwydaje się lepsze rozwiązanie lub

for i in "$INCOMINGDIR/"*"$BUSSINESSDATE"*
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.