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

Упомянутый урок использует подход низкого уровня для построения пакета. Такой подход обычно не рекомендуется и может привести к возникновению всех проблем, когда это не будет сделано тщательно.

Создание .deb для скрипта очень просто после понимания основ упаковки. В двух словах:

# Configure your paths and filenames
SOURCEBINPATH=~
SOURCEBIN=myscript.sh
DEBFOLDER=~/somescripts
DEBVERSION=0.1

DEBFOLDERNAME=$DEBFOLDER-$DEBVERSION

# Create your scripts source dir
mkdir $DEBFOLDERNAME

# Copy your script to the source dir
cp $SOURCEBINPATH/$SOURCEBIN $DEBFOLDERNAME 
cd $DEBFOLDERNAME

# Create the packaging skeleton (debian/*)
dh_make -s --indep --createorig 

# Remove make calls
grep -v makefile debian/rules > debian/rules.new 
mv debian/rules.new debian/rules 

# debian/install must contain the list of scripts to install 
# as well as the target directory
echo $SOURCEBIN usr/bin > debian/install 

# Remove the example files
rm debian/*.ex

# Build the package.
# You  will get a lot of warnings and ../somescripts_0.1-1_i386.deb
debuild

Добавление большего количества скриптов требует их скопировать в каталог и добавить в файл debian / install, а затем просто повторно запустить debuild. Вы должны также проверить и обновить файлы debian / * по мере необходимости.

Вы должны прочитать страницы руководства для: dh_make, dh_install и debuild

1
задан 2 September 2016 в 10:12

7 ответов

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

find . -type l -ls

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

find . -maxdepth 1 -type l -ls

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

170
ответ дан 24 May 2018 в 03:50
  • 1
    [F1] – ahnbizcad 28 May 2015 в 19:39
  • 2
    @ahnbizcad: Это не 1 (один), но l (ссылка) – Sylvain Pineau 28 May 2015 в 20:51
  • 3
    Отличный ответ! Я скорректировал мой, чтобы не спускаться по пути к каталогу следующим образом: find /<your_directory> -maxdepth 1 -type l -ls 2>/dev/null Спасибо! – bgs 4 February 2016 в 22:47
  • 4
    Только для текущего каталога (т. Е. не рекурсивного ) добавьте -maxdepth 1. – Joshua Pinter 8 April 2016 в 17:32

команда 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

Вы увидите, что во всех символических каталогах есть разрешение WordPress при прошивании флажков разрешений. и если вы берете 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$ 

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

7
ответ дан 24 May 2018 в 03:50
  • 1
    Небольшая спецификация здесь ... первый символ строки разрешений на самом деле не является разрешением. Это тип файла. Как вы сказали, l означает, что это символическая ссылка. – conner.xyz 4 April 2016 в 19:49

POSIXly:

find ! -name . -prune -type l
2
ответ дан 24 May 2018 в 03:50

grep является вашим другом:

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

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

2
ответ дан 24 May 2018 в 03:50

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

0
ответ дан 24 May 2018 в 03:50
  • 1
    ls -lai делает not показать тот же номер inode для файла и его символических ссылок. В отличие от жестких ссылок, символические ссылки имеют свои собственные отдельные записи inode. Вот как это выглядит. – Eliah Kagan 12 September 2014 в 11:19

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

Откройте терминал и перейдите в этот каталог. Введите команду:
ls -la
Это должно содержать длинный список всех файлов в каталоге, даже если они скрыты. Файлы, начинающиеся с l, являются вашими символическими файлами ссылок.
0
ответ дан 24 May 2018 в 03:50

Можно также выполнить с помощью 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, но этого достаточно использовать простое создание списка для перечисления ссылок в одном каталоге, как я показал выше.

0
ответ дан 24 May 2018 в 03:50

Другие вопросы по тегам:

Похожие вопросы: