Другие ответчики сказали, плюс следующее, которое входит в первичные ключи для таблиц подкласса.
Ваше дело выглядит как экземпляр шаблона проектирования, известного как «Специализация обобщения», или Gen-Spec для краткости , Вопрос о том, как моделировать ген-спецификацию с использованием таблиц базы данных, появляется все время в SO.
Если вы моделировали ген-spec в OOPL, например Java, вы использовали бы средство наследования подкласса для принятия заботиться о деталях для вас. Вы бы просто определили класс, чтобы позаботиться об обобщенных объектах, а затем определите коллекцию подклассов, по одному для каждого типа специализированного объекта. Каждый подкласс расширяет обобщенный класс. Это легко и просто.
К сожалению, реляционная модель данных не имеет встроенного наследования подкласса, и, как мне известно, системы баз данных SQL не предоставляют никаких подобных средств. Но тебе не повезло. Вы можете проектировать свои таблицы для моделирования gen-spec таким образом, который параллелен кластерной структуре ООП. Затем вам необходимо организовать реализацию собственного механизма наследования при добавлении новых элементов в обобщенный класс. Подробности следуют.
Структура класса довольно проста: одна таблица для класса gen и одна таблица для каждого подкласса spec. Вот хорошая иллюстрация, с сайта Мартина Фаулера. Наследование классов. Обратите внимание, что на этой диаграмме Cricketer является как подклассом, так и суперклассом. Вы должны выбрать, какие атрибуты входят в таблицы. На диаграмме показан один пример атрибута в каждой таблице.
Трудная деталь заключается в том, как вы определяете первичные ключи для этих таблиц. Таблица gen class получает первичный ключ обычным способом (если эта таблица не является специализацией еще одного обобщения, например Cricketers). Большинство дизайнеров дают первичному ключу стандартное имя, например «Id». Они используют функцию autonumber для заполнения поля Id. Таблицы классов spec получают первичный ключ, который можно назвать «Id», но функция autonumber не используется. Вместо этого первичный ключ каждой таблицы подкласса ограничивается ссылкой на первичный ключ обобщенной таблицы. Это делает каждый из специализированных первичных ключей внешним ключом, а также первичным ключом. Обратите внимание, что в случае Cricketers поле Id будет ссылаться на поле Id в Players, но поле Id в Bowlers будет ссылаться на поле Id в Cricketers.
Теперь, когда вы добавляете новые элементы, вам необходимо поддерживать ссылочную целостность. Вот как это сделать. Сначала вы вставляете новую строку в таблицу gen, предоставляя данные для всех своих атрибутов, за исключением первичного ключа. Механизм autonumber генерирует уникальный первичный ключ. Затем вы вставляете новую строку в соответствующую таблицу спецификаций, включая данные для всех ее атрибутов, включая первичный ключ. Первичный ключ, который вы используете, это копия только что созданного первичного ключа. Это распространение первичного ключа можно назвать «наследованием бедных людей».
Теперь, когда вы хотите, чтобы все обобщенные данные вместе со всеми специализированными данными только из одного подкласса, все, что вам нужно сделать, это присоединиться к двум таблицы по общим ключам. Все данные, которые не относятся к рассматриваемому подклассу, будут исключены из соединения. Он гладкий, легкий и быстрый.
Можно также использовать xargs. Просто передайте вывод по каналу ls до xargs.
ls | xargs
, Если это не работает и эти , находят , примеры выше не работают, пытаются передать их по каналу к xargs, поскольку он может помочь использованию памяти, которое могло бы вызывать Ваши проблемы.
Много других хороших решений здесь, но в интересах полноты:
echo *
Необходимо предоставить информацию о том, какую операционную систему и тип файловой системы Вы используете. На определенных ароматах UNIX и определенных файловых систем Вы могли бы быть в состоянии использовать команды ff
и ncheck
как альтернативы.
Как насчет find ./ -type f
(который будет находить все файлы в в настоящее время каталог)? Взлетите -type f
для нахождения всего.
Какой тип раздела Вы используете?
Наличие миллионы маленьких файлов в одном каталоге это могла бы быть хорошая идея использовать JFS или ReiserFS, которые имеют лучшую производительность со многими маленькими размерными файлами.
Если процесс "не возвращается", я рекомендую strace проанализировать, как процесс взаимодействует с операционной системой.
В случае ls:
$strace ls
Вы видели бы, что это читает все записи каталога ( getdents (2) ), прежде чем это на самом деле произведет что-либо. (sorting†¦, как это было уже упомянуто здесь)
Вещи попробовать:
Проверка ls не искажается?
alias ls
, Возможно, попытка находят вместо этого?
find . \( -type d -name . -prune \) -o \( -type f -print \)
Hope это помогает.
Можно перенаправить вывод и выполнить процесс ls в фоновом режиме.
ls > myls.txt &
Это позволило бы Вам продолжать о Вашем бизнесе в то время как его выполнение. Это не заперло бы Вашу оболочку.
Не уверенный в том, что опции для выполнения ls и возвращения меньше данных. Вы могли всегда работать man ls
для проверки.
Использование попытки:
find . -type f -maxdepth 1
Это только перечислит файлы в каталоге, не учтет -type f
аргумент, если Вы захотите перечислить файлы и каталоги.
Я предполагаю, что Вы используете GNU ls? попробуйте
\ls
, Это не исказит обычный ls (ls - color=auto).
Некоторые дополнения: Вы не упоминаете, на какой ОС вы работаете, что поможет указать, какую версию ls вы используете. Вероятно, это не столько вопрос «bash», сколько вопрос ls. Я предполагаю, что вы используете GNU ls, у которого есть некоторые функции, которые полезны в некоторых контекстах, но убивают вас в больших каталогах.
GNU ls Попытка получить более красивую организацию столбцов. GNU ls пытается грамотно расположить все имена файлов. В огромном каталоге это займет некоторое время и память.
Чтобы «исправить» это, вы можете попробовать:
ls -1
# вообще нет столбцов
найти BSD ls где-нибудь, http://www.freebsd.org/cgi/cvsweb.cgi/src/bin/ls/ и используйте его в своих больших каталогах.
Используйте другие инструменты, такие как find
Это, вероятно, бесполезный ответ, но если у вас нет find
, вы можете обойтись tar
$ tar cvf /dev/null .
Мне сказали люди старше меня, что «когда-то» однопользовательские среды и среды восстановления были намного более ограниченными, чем сейчас. Вот откуда этот трюк.