Как ls без рекурсии

19

Я пытаюсь ls некоторые файлы с шаблоном в каталоге. Я только хочу сканировать первый уровень не рекурсивный.

Мой сценарий:

for i in $(ls $INCOMINGDIR/*$BUSSINESSDATE*)
do
  echo $i;
done

Выше команды сканирование рекурсивно. Как можно сделать это только для сканирования каталога первого уровня?

ПАВ
источник
printf %s\\n "$INCOMINGDIR/"*"$BUSINESSDATE"*
mikeserv

Ответы:

39

Не разобратьls . Также не используйте ALL_CAPS_VARS

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

Интерактивно, lsесть -dопция, которая предотвращает спуск в подкаталоги:

ls -d $INCOMINGDIR/*$BUSSINESSDATE*
Гленн Джекман
источник
Спасибо за информацию, я собираюсь начать создавать файлы с новыми строками в названии, просто чтобы раздражать системных администраторов.
Петах
Вот почему умный сисадмин / программист использует "${i}". Вы никогда не знаете, что может быть i.
Рикки Бим
@Petah: или кто-то с плохими намерениями может создать файл с именем my_file.doc[newline]another_persons_file.docи надеяться, что некоторые сценарии могут попытаться «rm», что он видит как 2 имени файла ... Ссылка Гленна является обязательным для прочтения (на mywiki.wooledge.org, каждый должен прочитать весь FAQ, а также страница подводных камней)
Оливье Дюлак
1
круто. я не знал опцию -d!
Докаспар
Большой! Это работает и для простых вещей. Например, список всех файлов с префиксами:ls -d .*
Wassadamo
8

Нет причин, по которым эта команда должна быть рекурсивной. Но если $INCOMINGDIR/*$BUSSINESSDATE*соответствует каталогу, то содержимое этого каталога показывается вместо самого каталога. Но не было бы рекурсии за пределами этого уровня.

Используйте эту команду, чтобы избежать этого эффекта:

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

for ... inКоманды с lsвыводом являются рискованными.

В общем, findкажется, лучшее решение или

for i in "$INCOMINGDIR/"*"$BUSSINESSDATE"*
Хауке Лагинг
источник