Как перечислить все символические ссылки в каталоге

145

У меня есть символическая ссылка в моем /var/www/каталоге, которая ссылается на WordPress. Когда я запускаю команду ls -laиз /var/www/каталога, ссылка на WordPress не отображается. Есть ли способ перечислить все символические ссылки, которые находятся в каталоге?

Исаак
источник

Ответы:

80

Вы можете использовать grepс lsкомандой, чтобы перечислить все символические ссылки, присутствующие в текущем каталоге.

Это перечислит все ссылки, присутствующие в текущем каталоге.

ls -la /var/www/ | grep "\->"
G_p
источник
5
Он вернет ложное срабатывание, если у вас есть файл, содержащий " ->". Попробуйте простоtouch "foo->"
Сильвен Пино,
7
пожалуйста, не копируйте и не вставляйте содержимое другого ответа в свой ответ. -1
αғsнιη
3
почему не grepс ^l?
Элиран Малка
3
Как обычно, лучший ответ - тот, у кого самый высокий +
FractalSpace
Приятно! → .bash_alias: alias listlinks='ls -l --color | grep "\->"'8-)
Фрэнк Нок
285

Разбор lsявляется плохой идеей ® , предпочитают простое findв таком случае:

find . -type l -ls

Чтобы обработать только текущий каталог:

find . -maxdepth 1 -type l -ls

Кредиты: Как заставить оболочку распознавать имена файлов, возвращаемые командой `ls -A`, и эти имена содержат пробелы?

Сильвен Пино
источник
find: Unknown argument to -type: 1
ahnbizcad
15
@ahnbizcad: Это не 1(один), но l(ссылка)
Сильвен Пино,
3
Отличный ответ! Я настроил мой, чтобы не спускаться вниз по пути каталога, как это: find /<your_directory> -maxdepth 1 -type l -ls 2>/dev/null Спасибо!
Bgs
3
Только для текущего каталога (т.е. не рекурсивного ) добавить -maxdepth 1.
Джошуа Пинтер
1
@ cig0 тебе не нужно использовать awk, ты , вероятно, хочешь только этого:find . -maxdepth 1 -type l | sort -n
sobi3ch
10

ls -laкоманда показывает все файлы и папки , а также символический связанный каталог, если эта команда не показывает символический каталог это означает , что вы не имеете символическую ссылку на WordPress .

увидеть результат выполнения ls -la:

kasiya@kasiya-pc:~$ cd /sys/devices/platform/sony-laptop
kasiya@kasiya-pc:/sys/devices/platform/sony-laptop$ ls -la
total 0
drwxr-xr-x  3 root root    0 Sep  9 19:57 .
drwxr-xr-x 14 root root    0 Sep 10  2014 ..
-r--r--r--  1 root root 4096 Sep  9 22:32 battery_care_health
-rw-r--r--  1 root root 4096 Sep  9 22:32 battery_care_limiter
lrwxrwxrwx  1 root root    0 Sep  9 19:57 driver -> ../../../bus/platform/drivers/sony-laptop
-r--r--r--  1 root root 4096 Sep  9 22:32 modalias
drwxr-xr-x  2 root root    0 Sep  9 22:32 power
lrwxrwxrwx  1 root root    0 Sep  9 22:32 subsystem -> ../../../bus/platform
-rw-r--r--  1 root root 4096 Sep  9 22:32 touchpad
-rw-r--r--  1 root root 4096 Sep  9 19:57 uevent

Вы увидите, что все символьные каталоги имеют lразрешения при появлении флагов разрешений. и если вы берете grep с собой, ^lвы можете перечислить только символические файлы или каталог:

kasiya@kasiya-pc:/sys/devices/platform/sony-laptop$ ls -la |grep ^l
lrwxrwxrwx 1 root root    0 Sep  9 19:57 driver -> ../../../bus/platform/drivers/sony-laptop
lrwxrwxrwx 1 root root    0 Sep  9 22:32 subsystem -> ../../../bus/platform
kasiya@kasiya-pc:/sys/devices/platform/sony-laptop$ 

Здесь каталог драйверов и подсистем является символической ссылкой на другой каталог.

αғsнιη
источник
1
Незначительная спецификация здесь ... первый символ строки разрешений на самом деле не является разрешением. Это тип файла. Как вы уже сказали l, это символическая ссылка.
conner.xyz
5

grep твой друг:

ls -lhaF | grep ^l   # list links
ls -lhaF | grep ^d   # list directories
ls -lhaF | grep ^-   # list files

Это будет список строк, начинающихся с «l», которые представляют ссылки в столбце perms вместо lиспользования dдля каталогов и -файлов

Kalibur
источник
1

Чтобы просмотреть символические ссылки в каталоге:

  1. Откройте терминал и перейдите в этот каталог.

  2. Введите команду:

    ls -la
    

    Это приведет к длинному списку всех файлов в каталоге, даже если они скрыты.

  3. Файлы, которые начинаются с, lявляются вашими символическими ссылочными файлами.

сандип сривастав ваддипарти
источник
1
-1: Ответ Касии уже охватывает это.
Муру
1

Это возвращает все символически связанные элементы (и dirs & fns) в каталоге:

find . -maxdepth 1 -type l -print | cut -c3- | grep -v "\#"

Однако для того, чтобы различать фактические символически связанные типы элементов:

ls -lhaF | grep ^l | grep -v "\#" | cut -c42- | grep -v "/" | cut -d' ' -f1

Возвращает только символически связанные элементы имени файла. А также,

ls -lhaF | grep ^l | grep -v "\#" | cut -c42- | grep "/" | cut -d' ' -f1

Возвращает только символически связанные элементы dirname.

odoncaoa
источник
0

Тип ls -lai, он перечислит все файлы и подкаталоги с соответствующими номерами инодов. Вы знаете, что файлы с одинаковым номером инода являются ссылками (жесткими или программными), и это решение также работает для символических ссылок.

саптарши наг
источник
ls -laiэто не показывает один и тот же номер индексного дескриптора для файла и его символических ссылок. В отличие от жестких ссылок, символические ссылки имеют свои собственные отдельные записи inode. Вот как это выглядит.
Элия ​​Каган
0

Можно также сделать с python:

$ python -c "import os,sys; print '\n'.join([os.path.join(sys.argv[1],i) for i in os.listdir(sys.argv[1]) if os.path.islink(os.path.join(sys.argv[1],i))])" /path/to/dir

Образец прогона:

$ python -c "import os,sys; print '\n'.join([os.path.join(sys.argv[1],i) for i in os.listdir(sys.argv[1]) if os.path.islink(os.path.join(sys.argv[1],i))])" /etc
/etc/vtrgb
/etc/printcap
/etc/resolv.conf
/etc/os-release
/etc/mtab
/etc/localtime

Это может быть расширено, чтобы быть рекурсивным через os.walkфункцию, но достаточно использовать простую генерацию списка для перечисления ссылок в одном каталоге, как я показал выше.

Сергей Колодяжный
источник