Как я могу перечислить файлы типом с ls?

Ну, я только что закончил писать некоторые строки о мертвом обнаружении шлюза и соседней недостижимости для многосетевых установок маршрутизации в другом вопросе. Возможно, мой ответ проливает больше света на тему.

20
02.11.2014, 10:03
8 ответов

Вы можете отфильтровать все, кроме каталогов, используя GREP таким образом:

ls -l | grep '^d'

^ указывает, что шаблон находится в начале линии Отказ Заменить D с - , L , как применимо.

Вы, конечно, можете использовать другие команды для непосредственного поиска конкретных типов (например, Найти. -MaxDepth 1 -Type d ) или использование LS -L | Сортировать Чтобы сгруппировать аналогичные типы вместе на основе этого первого символа, но если вы хотите фильтровать, вы должны использовать GREP , чтобы выделить только соответствующие строки с вывода.

9
27.01.2020, 19:44

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

ls -l | sort -k1,1
8
27.01.2020, 19:44
ls -l | awk '/^d/{print $NF}

awk поймает все, что начинается с d. Как d для каталога, и вам нужно распечатать последнее поле, чтобы переписать имя каталога

2
27.01.2020, 19:44

С помощью grep можно отфильтровать все каталоги:

ls -l | grep '^d'

^ указывает, что шаблон находится в начале строки. Заменить d на - , l и т.д., в зависимости от обстоятельств.

Конечно, можно использовать другие команды для непосредственного поиска определенных типов (например, find. -maxdepth 1 -type d ) или используйте ls -l | sort , чтобы сгруппировать подобные типы на основе этого первого символа, но если вы хотите фильтровать, следует использовать grep , чтобы выбрать только соответствующие строки из вывода.

-121--22457-

Если вы больше всего обеспокоены заказом папок из других типов файлов, вы можете пойти с

ls --group-directories-first

, в противном случае, я думаю, вы должны направить выходные данные из ls -l через сортировку или через grep, как ответил Anthon

-121--22460-
ls -l | sort 

Результат будет отсортирован по алфавитному порядку каждого результата. Если первый символ - это критерии, которые вы хотите, то все. Если вам нужны только имена файлов, вы можете попробовать:

ls -l | sort | cut -f 2 -d ' ' 

Или что-то подобное (эта команда сортирует и затем разбивает каждую строку с помощью разделителя пробела, затем возвращает вторую группу.

1
27.01.2020, 19:44

Прежде всего, что касается части «резюме» вашего вопроса, -партийный просто говорит принимающей стороне сохранить частично переданные файлы, если отправляющая сторона исчезнет, как если бы они были полностью переданы.

При передаче файлов они временно сохраняются в виде скрытых файлов в целевых папках (например, .TheFileYouAureSending.lRWzDC ) или в специально выбранной папке, если установлен переключатель -партийный-dir . Если передача завершается неуспешно и параметр --partial не установлен, этот скрытый файл останется в целевой папке под этим криптическим именем, но если установлен параметр -partial , файл будет переименован в фактическое имя целевого файла (в данном случае TheFileYouAreSending ), даже если файл не является полным. Это точка, что позже можно завершить передачу, снова запустив rsync с помощью --append или --append-verify .

Таким образом, -частичная не сама возобновляет неудачную или отмененную передачу. Чтобы возобновить его, вам придется использовать один из вышеупомянутых флагов на следующем прогоне. Таким образом, если вы должны убедиться, что цель никогда не будет содержать файлы, которые кажутся хорошими, но на самом деле неполными, вы не должны использовать --парtial . И наоборот, если вы хотите убедиться, что вы никогда не оставляете после себя сбойные сбойные файлы, которые скрыты в целевом каталоге, и вы знаете, что вы сможете завершить передачу позже, -частичный будет вам помочь.

Что касается переключателя --добавить , упомянутого выше, это фактический переключатель «возобновить», и вы можете использовать его независимо от того, используете ли вы также -частичный . Фактически, при использовании --добавления временные файлы не создаются. Файлы записываются непосредственно в целевые объекты. В этом отношении --добавление дает тот же результат, что и -частное при неудачной передаче, но без создания этих скрытых временных файлов.

Итак, если вы перемещаете большие файлы и хотите, чтобы операция rsync была отменена или прервана с момента остановки rsync , при следующей попытке необходимо использовать переключатель --append или -append-verify .

Так как @ Alex точек ниже, так как версия 3,0,0 rsync теперь имеет новый параметр, --append-verify , который ведет себя как --append до того, как этот параметр существовал. Возможно, вам всегда требуется поведение --append-verify , поэтому проверьте свою версию с помощью rsync --version . Если вы находитесь на компьютере Mac и не используете rsync из home ebrew , вы (по крайней мере, до El Capitan включительно) будете иметь более старую версию и вам нужно будет использовать --append , а не -apend-verify . Почему они не сохранили поведение в --добавке и вместо этого назвали нового --аппенд-no-verify немного озадачивает. Либо путь, --apend на rsync перед версией 3 совпадает с --apend-verify на более новых версиях.

--append-verify не опасен: он всегда считывает и сравнивает данные на обоих концах, а не только предполагает, что они равны. Он делает это, используя контрольные суммы, поэтому это легко в сети, но он требует чтения общего объема данных на обоих концах провода, прежде чем он может фактически возобновить передачу, добавив к цели.

Во-вторых, вы сказали, что «слышали, что rsync способен находить различия между источником и местом назначения, и поэтому просто копировать различия»

. Для этого необходимо добавить переключатель -c или --checksum . После использования этого переключателя rsync проверяет файлы, существующие на обоих концах провода. Он делает это в кусках, сравнивает контрольные суммы на обоих концах, и если они отличаются, он передает только различные части файла. Но, как указывает ниже @ Jonathan, сравнение выполняется только тогда, когда файлы имеют одинаковый размер на обоих концах - разные размеры заставят rsync загрузить весь файл, перезаписав целевой объект с одинаковым именем.

Это требует некоторого вычисления на обоих концах изначально, но может быть чрезвычайно эффективным для снижения сетевой нагрузки, если, например, вы часто резервируете очень большие файлы фиксированного размера файлы, которые часто содержат незначительные изменения. В качестве примеров можно привести файлы образов виртуальных жестких дисков, используемые в виртуальных машинах или целях iSCSI.

Примечательно, что при использовании --checksum для передачи пакета файлов, которые являются совершенно новыми для целевой системы, rsync будет по-прежнему рассчитывать их контрольные суммы в исходной системе перед их передачей. Почему я не знаю:)

Итак, короче говоря:

Если вы часто используете rsync, чтобы просто «переместить материал из A в B» и хотите, чтобы опция отменила эту операцию и позже возобновила ее, не используйте -checksum , но используйте -append-verify .

Если вы часто используете rsync для резервного копирования данных, использование --append-verify , вероятно, не принесет вам больших результатов, если вы не привыкли отправлять большие файлы, которые постоянно растут в размере, но редко изменяются после написания. В качестве бонусного наконечника при резервном копировании в места хранения, поддерживающие создание снимков файловой системы, например, btrfs или zfs , добавление переключателя -inplace поможет уменьшить размер снимков файловой системы, поскольку измененные файлы не создаются повторно, а измененные блоки записываются непосредственно поверх старых. Этот переключатель также полезен, если требуется избежать создания копий файлов в целевом устройстве при незначительных изменениях.

При использовании --append-verify rsync будет вести себя так же, как всегда во всех файлах одинакового размера.Если они отличаются изменениями или другими временными метками, целевой объект будет перезаписан источником без дополнительной проверки этих файлов. --checksum сравнит содержимое (контрольные суммы) каждой пары файлов с одинаковыми именем и размером.

ОБНОВЛЕНО 2015-09-01 Изменено для отражения точек, сделанных @ Alex (спасибо!)

ОБНОВЛЕНО 2017-07-14 Изменено для отражения точек, сделанных @ Jonathan (спасибо!)

-121--1074-

Точки доступа эквивалентны коммутаторам Ethernet; они передают пакеты из одного физического сегмента в другой. Разница в том, что с одной стороны сегмент оказывается беспроводным. Переход от одной точки доступа к другой подобен быстрому отключению кабеля Ethernet от одного порта коммутатора к другому. Широковещательный пакет выходит, уведомляя коммутаторы в сети о новом маршруте к вашему адресу, и обслуживание продолжается по существу без прерывания.

-121--129028-

Если вы больше всего обеспокоены упорядочением папок из других типов файлов, вы можете пойти с

ls --group-directories-first

, в противном случае, я думаю, что вы должны передать выходные данные из ls -l через сортировку или через grep, как ответил Anthon

2
27.01.2020, 19:44

Команда ls имеет дело с именами файлов , которые записаны в структурах данных каталога. Таким образом, на самом деле он не заботится о самом файле, включая «тип» файла.

Команда, которая больше подходит для работы с фактическими файлами , а не только с их именами, - это find . У нее есть опция, которая напрямую отвечает на ваш вопрос по как отфильтровать список по типу файла.

Это дает список текущего каталога, аналогичный ls -l :

find . -maxdepth 1 -ls

По умолчанию find рекурсивно выводит список каталогов, что отключено ограничением глубины поиска до 1 .
Вы можете не указывать . , но я включил его, чтобы показать, что каталоги должны быть указаны перед параметрами.

С помощью -типа вы можете фильтровать по типу файла, который выражается как f или d для простых файлов или каталогов:

find . -maxdepth 1 -type d -ls

Есть другие значения фильтра для -типа , особенно l для символьных ссылок.
Обратите внимание, что есть сложность с символическими ссылками :
В этом случае есть два типа файла: l , что означает символическая ссылка и что-то вроде f , указывающее тип файла, на который ссылается. Есть варианты, чтобы указать, как с этим справиться, так что вы можете выбирать.


Из человек находит :

    -type c
           File is of type c:

           b      block (buffered) special

           c      character (unbuffered) special

           d      directory

           p      named pipe (FIFO)

           f      regular file

           l      symbolic link; this is never true if the  -L  option
                  or  the -follow option is in effect, unless the sym‐
                  bolic link is broken.  If you  want  to  search  for
                  symbolic links when -L is in effect, use -xtype.

           s      socket

           D      door (Solaris)

и имеет отношение к обработке символических ссылок:

    -xtype c
           The  same as -type unless the file is a symbolic link.  For
           symbolic links: if the -H or -P option was specified,  true
           if the file is a link to a file of type c; if the -L option
           has been given, true if c is `l'.  In other words, for sym‐
           bolic  links, -xtype checks the type of the file that -type
           does not check.

и

    -P     Never follow symbolic links.  This is  the  default  behav‐
           iour.  When find examines or prints information a file, and
           the file is a symbolic link, the information used shall  be
           taken from the properties of the symbolic link itself.


    -L     Follow symbolic links.  When find examines or prints infor‐
           mation about files, the information  used  shall  be  taken
           from  the  properties of the file to which the link points,
           not from the link itself (unless it is  a  broken  symbolic
           link  or  find  is  unable to examine the file to which the
           link points).  Use of this option implies -noleaf.  If  you
           later  use  the -P option, -noleaf will still be in effect.
           If -L is in effect and find discovers a symbolic link to  a
           subdirectory during its search, the subdirectory pointed to
           by the symbolic link will be searched.

           When the -L option is in effect, the -type  predicate  will
           always  match  against the type of the file that a symbolic
           link points to rather than the link itself (unless the sym‐
           bolic  link  is  broken).   Using  -L causes the -lname and
           -ilname predicates always to return false.


    -H     Do not follow symbolic links, except while  processing  the
           command  line  arguments. [...]
8
27.01.2020, 19:44

от меня, ls -lXмогу выполнить работу

1
08.11.2020, 07:53

Таким образом создается категория типа файла для каждого файла в каталоге.

лк -лк | файл xargs

Команда file используется для определения типа файла. Тип файла.file может быть удобочитаемым -для человека (, например. «Текст ASCII» )или тип MIME (, например. 'текст/обычный; charset=us -ascii' ). Эта команда проверяет каждый аргумент, пытаясь классифицировать его.

0
18.08.2021, 12:56

Теги

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