Вы можете отфильтровать все, кроме каталогов, используя GREP
таким образом:
ls -l | grep '^d'
^
указывает, что шаблон находится в начале линии Отказ Заменить D
с -
, L
, как применимо.
Вы, конечно, можете использовать другие команды для непосредственного поиска конкретных типов (например, Найти. -MaxDepth 1 -Type d
) или использование LS -L | Сортировать
Чтобы сгруппировать аналогичные типы вместе на основе этого первого символа, но если вы хотите фильтровать, вы должны использовать GREP
, чтобы выделить только соответствующие строки с вывода.
Если вы хотите отобразить все вывод, но имеете файлы подобного типа, перечислены вместе, вы можете отсортировать вывод на первом символу каждой строки:
ls -l | sort -k1,1
ls -l | awk '/^d/{print $NF}
awk поймает все, что начинается с d. Как d для каталога, и вам нужно распечатать последнее поле, чтобы переписать имя каталога
С помощью grep
можно отфильтровать все каталоги:
ls -l | grep '^d'
^
указывает, что шаблон находится в начале строки. Заменить d
на -
, l
и т.д., в зависимости от обстоятельств.
Конечно, можно использовать другие команды для непосредственного поиска определенных типов (например, find. -maxdepth 1 -type d
) или используйте ls -l | sort
, чтобы сгруппировать подобные типы на основе этого первого символа, но если вы хотите фильтровать, следует использовать grep
, чтобы выбрать только соответствующие строки из вывода.
Если вы больше всего обеспокоены заказом папок из других типов файлов, вы можете пойти с
ls --group-directories-first
, в противном случае, я думаю, вы должны направить выходные данные из ls -l через сортировку или через grep, как ответил Anthon
-121--22460-ls -l | sort
Результат будет отсортирован по алфавитному порядку каждого результата. Если первый символ - это критерии, которые вы хотите, то все. Если вам нужны только имена файлов, вы можете попробовать:
ls -l | sort | cut -f 2 -d ' '
Или что-то подобное (эта команда сортирует и затем разбивает каждую строку с помощью разделителя пробела, затем возвращает вторую группу.
Прежде всего, что касается части «резюме» вашего вопроса, -партийный
просто говорит принимающей стороне сохранить частично переданные файлы, если отправляющая сторона исчезнет, как если бы они были полностью переданы.
При передаче файлов они временно сохраняются в виде скрытых файлов в целевых папках (например, .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
Команда 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. [...]
Таким образом создается категория типа файла для каждого файла в каталоге.
лк -лк | файл xargs
Команда file используется для определения типа файла. Тип файла.file может быть удобочитаемым -для человека (, например. «Текст ASCII» )или тип MIME (, например. 'текст/обычный; charset=us -ascii' ). Эта команда проверяет каждый аргумент, пытаясь классифицировать его.