Как 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"*
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.