Як перелічити всі символічні посилання в каталозі


145

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


Відповіді:


80

За grepдопомогою lsкоманди можна перелічити всі символьні посилання, наявні в поточному каталозі.

Тут буде перераховано всі посилання, наявні в поточному каталозі.

ls -la /var/www/ | grep "\->"

5
Він поверне помилковий позитив, якщо у вас є файл, що містить " ->". Спробуйте простоtouch "foo->"
Sylvain Pineau

7
не копіюйте та не вставляйте вміст іншої відповіді на власну відповідь. -1
αғsnιη

3
чому не grepінг ^l?
Еліран Малька

3
Як завжди, найкраща відповідь - одна з найвищими +
FractalSpace

Приємно! → .bash_alias: alias listlinks='ls -l --color | grep "\->"'8-)
Френк Нокк

283

Парсінг 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(посилання)
Sylvain Pineau,

3
Чудова відповідь! Я налаштував мою, щоб не спускатися вниз по шляху каталогів так: find /<your_directory> -maxdepth 1 -type l -ls 2>/dev/null Дякую!
bgs

3
Для додавання лише поточного каталогу (тобто не рекурсивного ) -maxdepth 1.
Джошуа Пінтер

1
@ cig0 u не потрібно використовувати 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дозвіл на випробовування прапорів дозволів. і якщо ви берете з собою, ^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$ 

Каталог драйверів та підсистем є символічним посиланням на інший каталог тут.


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для каталогів та -файлів



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.


0

Введіть ls -lai, він перелічить усі файли та підкаталоги з відповідними номерами inode. Ви знаєте, що файли з однаковим номером inode є посиланнями (жорсткі або м'які), і це рішення також працює для символічних посилань.


ls -laiце НЕ показує один і той же номер індексного дескриптора для файлу і його символічних посилань. На відміну від жорстких посилань, символічні посилання мають свої окремі записи вкладки. Ось як це виглядає.
Eliah Kagan

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функції, але достатньо використовувати просту генерацію списку для переліку посилань в одному каталозі, як я показав вище.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.