Перебирать все в каталоге?

Anaconda? https://www.continuum.io/downloads

Существует также меньшая версия Miniconda, с меньшим количеством пакетов.

4
07.09.2016, 03:59
4 ответа
  1. Как отметил Джефф Шаллер , * обычно работает как ls - {{ 1}} он не будет показывать вещи, имена которых начинаются с . (точка). Если вы используете bash, и хотите получить вещи, имена которых начинаются с . , s et (включить) sh ell opt ion dotglob с помощью команды

     shopt -s dotglob 
     

    Это заставит * работать как ls -A - он все равно не будет отображаться . и .. сами по себе, но покажет все остальное, начиная с . .

  2. В вашем вопросе упоминается «все в каталоге». Это несколько двусмысленная фраза. Если вы имеете в виду все, что находится в каталоге (верхнего уровня) / Applications , , тогда другие ответы подходят. Но если вам нужно все в дереве / Приложения (т. Е., все в каталоге / Applications и его подкаталогах ), и вы используете bash, установите параметр оболочки globstar с помощью команды

     shopt -s globstar 
     

    Это приведет к тому, что ** как компонент имени файла будет означать все здесь и ниже. Итак,

     для файла в / Applications / ** 
    do 
    echo "$ file" 
    done 
     

    отобразит все объекты (файлы, каталоги и т. д.) в дереве / Applications .

    Обратите внимание, что это нельзя комбинировать с другими символами на том же уровне компонента; то есть вы не можете делать такие вещи, как foo ** bar . Однако вы добавляете другие компоненты после ** . Например,

     для файла в / Applications / ** / README 
     

    будет перебирать все файлы с именем README в / Applications , и

     для файла в /Applications/**/*.txt
    

    найдут все файлы, имена которых заканчиваются на .txt .

  3. Вы можете установить несколько параметров одновременно; например, с помощью

     shopt -s dotglob globstar 
     

    Полный список опций см. в документации по bash. Вы можете установить параметры u nset с помощью shopt -u .

  4. Вы всегда должны указывать все ссылки на переменные оболочки (например, "$ file" ), если у вас нет веской причины не делать этого, и вы уверены вы знаете, что делаете.
7
27.01.2020, 20:45

Этот формат позволяет вам выбирать из всех вариантов перечисления и сортировки ls:

ls -at $DIR | while read i; do echo $i; done
-4
27.01.2020, 20:45

Оператор * называется оператором подстановки (расширения имени) оболочки (? и [] тоже) , когда вы вызываете его без кавычек, он расширяется до всех файлов в текущем каталоге (без префикса каталога). Если вы используете префикс, например / foo / * , он будет расширен до всех файлов в каталоге / foo .

Обратите внимание, что он также используется для сопоставления определенных файлов, например, для сопоставления только файлов, которые начинаются с foo и заканчиваются на bar в текущем каталоге, используйте glob pattern:

foo*bar

Итак, цикл for теперь может принимать форму:

for f in foo*bar; do echo "$f"; done

Прочтите страницу man вашей оболочки, чтобы получить больше информации о подстановке оболочки.

8
27.01.2020, 20:45

Для перебора файлов (и подкаталогов) в каталоге можно использовать

for file in /Applications/*
do
    echo "$file"
done

Обратите внимание, что если не найдено ни одного совпадения, переменная file будет содержать строку /Applications/* буквально (со звездочкой), и это может вызвать ошибки, если следующие команды ожидают существующий путь. Если вы хотите ничего не делать, если ни один файл не найден, вы можете использовать опцию nullglob:

shopt -s nullglob
for file in /Applications/*
do
    echo "$file"
done
8
27.01.2020, 20:45

Теги

Похожие вопросы