Вопрос или проблема
Я хочу исключить символические ссылки из списка директории. Я использовал следующую команду:
dir --ignore=@ -F
Но символические ссылки все еще отображаются, как показано.
Как я могу исключить их при использовании команды dir?
Спасибо.
Вы можете использовать find
, чтобы исключить символические ссылки:
find -maxdepth 1 ! -type l ! -path './.*' -ls
С помощью ! -type l
я исключаю символические ссылки. Таким образом, будут отображаться директории, обычные файлы, специальные файлы и т. д.
А с помощью ! -path './.*'
я исключаю скрытые файлы (например, .bashrc
,.profile
)
Если вы хотите получить вывод, как при использовании ls
или dir
, тогда вам следует использовать:
#С цветом
find -maxdepth 1 ! -type l ! -path './.*' -exec ls --color=yes -Fd {} +
#Без цвета
find -maxdepth 1 ! -type l ! -path './.*' -exec ls -Fd {} +
С оболочкой zsh
вы можете использовать глобальные квалайферы, чтобы фильтровать файлы по их типу в глобальных расширениях.
dir -Fd -- *(^@)
Это вызовет dir
с нескрытыми файлами в текущей директории, которые не (^
) являются типом ссылки (@
) в качестве аргументов.
Если вам просто нужно увидеть список, вам даже не нужно вызывать dir
(или более юниксный ls
), вы можете передать их встроенной команде print
в zsh
.
Например:
print -rC1 -- *(^@)
Это print
их r
авом в 1
C
олонке.
Использование квалайфера M
ark добавляет /
в конце файлов типа директория, как это делает dir -F
, но это только для директорий.
print -rC1 -- *(M^@)
--ignore
не работает на типах, он работает на шаблонах. Например, если у вас есть файлы:
$ ls
a.txt b.dat c.txt d.dat
$ ls --ignore="*.txt"
b.dat d.dat
Нет простого способа отфильтровать символические ссылки, но вы можете попробовать использовать grep
ls -F | grep -v "@"
У меня аналогичная проблема, и так как это один из первых результатов Bing для linux tree exclude symbolic links
, вот как заставить команду tree
не следовать за символическими ссылками:
tree -I '@*'
или
tree --nolinks
Флаг -I
предназначен для шаблонов, которые должны быть исключены из рекурсии, и символические ссылки “невидимо” начинаются с @
. Символические ссылки все еще будут отображаться, но не будут исследоваться дальше.
Хотя в документации указано, что tree
по умолчанию не следует символическим ссылкам, это опечатка, как объясняется в этой ответе. По умолчанию команда tree
не следует символическим ссылкам, которые указывают на файлы, уже перечисленные в этой команде.
Ответ или решение
Как исключить символические ссылки из вывода команды dir в Linux
Если вы хотите исключить символические ссылки из вывода команды dir
, вы можете столкнуться с некоторыми трудностями. Рассмотрим несколько возможных методов, которые позволят решить эту задачу.
1. Использование команды find
Один из самых эффективных способов — это выполнить команду find
, которая может легко фильтровать файлы по типу. Вот пример команды, которая исключает символические ссылки:
find . -maxdepth 1 ! -type l -ls
Здесь ! -type l
исключает символические ссылки, и вы получите список всех остальных файлов и каталогов в текущем каталоге. Ключ -maxdepth 1
используется для ограничения поиска только текущим каталогом, не углубляясь в вложенные папки.
Если хотите, чтобы вывод более походил на ls
или dir
, используйте следующую команду:
find . -maxdepth 1 ! -type l -exec ls -F {} +
Эта команда вызовет ls
, чтобы отобразить файлы в привычном виде.
2. Использование оболочки zsh
Если вы используете оболочку zsh
, вы можете воспользоваться её возможностями для фильтрации файлов. Вот команда, которая исключит символические ссылки:
dir -Fd -- *(^@)
Этот синтаксис использует знакомые символы *
для выборки всех файлов, исключая символические ссылки (обозначенные @
).
Примечание
Если вы просто хотите увидеть список без вызова dir
, вы можете использовать:
print -rC1 -- *(^@)
Эта команда выведет файлы в одном столбце без символических ссылок.
3. Использование grep для фильтрации
Если у вас сложная структура файлов и вы уже используете команды, такие как ls
, вы можете отфильтровать вывод с помощью grep
:
ls -F | grep -v '@'
Здесь grep -v '@'
исключает строки, содержащие символ @
, который указывает на символические ссылки.
4. Команда tree для обхода символических ссылок
Если вы используете команду tree
, вы можете воспользоваться следующими опциями:
tree -I '@*'
Или более простая команда:
tree --nolinks
Эти команды не будут следовать за символическими ссылками. Однако помните, что символические ссылки по-прежнему будут отображаться в выводе.
Заключение
Каждый из предложенных методов позволяет эффективно исключить символические ссылки из вывода команд в Linux. Выберите тот, который вам наиболее удобен и соответствует вашим требованиям. Обратите внимание, что использование find
и zsh
предлагает наибольшую гибкость и контроль над выводом.
Изучите эти команды, чтобы оптимизировать вашу работу с файловой системой и повысить продуктивность при выполнении задач.