У меня есть символическая ссылка в моем /var/www/
каталог, который ссылается на WordPress. Когда я выполняю команду ls -la
из /var/www/
каталог ссылка на WordPress не отображается. Есть ли способ перечислить все символические ссылки, которые находятся в каталоге?
Разбор ls
это Плохая Идея®, предпочитаю простой find
в таком случае:
find . -type l -ls
Для обработки только текущего каталога:
find . -maxdepth 1 -type l -ls
Вы можете использовать grep
с ls
команда для перечисления всех символических ссылок, присутствующих в текущем каталоге.
При этом будут перечислены все ссылки, присутствующие в текущем каталоге.
ls -la /var/www/ | grep "\->"
grep
это твой друг:
ls -lhaF | grep ^l # list linksls -lhaF | grep ^d # list directoriesls -lhaF | grep ^- # list files
При этом будут перечислены строки, начинающиеся с "l", которые представляют ссылки в столбце perms вместо l
использовать d
для каталогов и -
для файлов
Позиционно:
find ! -name . -prune -type l
Это возвращает все символически связанные элементы (как 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.
Для просмотра символических ссылок в каталоге:
Откройте терминал и перейдите в этот каталог.
-
Введите команду:
ls -la
Это приведет к длинному списку всех файлов в каталоге, даже если они скрыты.
Файлы, начинающиеся с
l
это ваши файлы символических ссылок.
использование zsh
ls -l *(@)lrwxrwxrwx 1 david david 15 Nov 18 22:35 gvimrc -> /etc/vim/gvimrclrwxrwxrwx 1 david david 13 Nov 18 22:19 mydomains.php -> mydomains.php
Пожалуйста, найдите ниже однострочную команду bash script для рекурсивного поиска всех неработающих символьных ссылок в любой ОС на базе Linux
b=$(find / -type l); for i in $(echo $b); do file $i ; done |grep -i broken 2> /dev/null
Тип ls -lai
, в нем будут перечислены все файлы и подкаталоги с соответствующими номерами индексов.Вы знаете, что файлы с одинаковым номером индекса являются ссылками (жесткими или мягкими), и это решение также работает для символических ссылок.
Это также можно сделать с помощью 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
функция, но достаточно использовать простую генерацию списка для перечисления ссылок в одном каталоге, как я показал выше.