Как я говорю, является ли папка на самом деле символьной ссылкой и как я фиксирую ее, если она повреждается?

Вот awk решение. Я не знаю YML, таким образом, Вы, возможно, должны играть с regexps (например, маркер региона может быть расположен с отступом?). Обратите внимание что print data >filename конструкция создает или усекает файл в первый раз, когда это достигнуто данное имя файла и затем добавляет в файл.

<input.yml awk '
/^[^ :]+: *$/ {sub(/: *$/,""); region=$0}     # start of region
/^ *groups:/ {                                # owner or member list
    sub(/^[^:]*: *\[/, ""); sub(/\].*/, "");  # extract bracketed names
    split($0, names, / *, */);                # split comma-separated list
    for (n in names)                          # iterate over names
        print region >names[n] ".txt";        # write or append to name file
}'

Не относитесь к нему слишком серьезно, но вот решение для sed и оболочки.

<input.yml sed -n -e '/^[^ ]/ h' \
                  -e '/^ \+groups:/ {' \
                    -e 'G' \
                    -e 's/^[^:]*: *\[\(.*\)\]\n\(.*\):/\2,\1/' \
                    -e 's/, \+/,/g' \
                    -e 'p' -e '}' | (
  IFS=,; set -f
  while read -r region names; do
    for name in $names; do
      echo "$region" >>"$name.txt"
    done
  done
)
29
30.09.2012, 16:12
4 ответа

удар:

if [[ -h dirname ]]; then
    echo "it's a symbolic link"
    if ! stat $(readlink dirname) &>/dev/null; then
        echo "link target does not exist"
    fi
fi
8
27.01.2020, 19:38

Самый легкий способ видеть, какой объект данный файл, состоял бы в том, чтобы использовать file команда. Это имеет ясный, нормальный вывод без requireing Вы для запоминания что ls метки классификатора, или доверие цветному выводу, который может варьироваться от пользователя пользователю и машины к машине. Например:

mail ~ # file /test
/test: broken symbolic link to `/nonexist'
mail ~ # file /dev
/dev: directory
mail ~ # file /dev/fd
/dev/fd: symbolic link to `/proc/self/fd'

Если Вы оказываетесь в системе без file можно использовать stat команда, которая скажет Вам, какая запись файла это и где она указывает. Чтобы узнать, разорвана ли связь, необходимо будет затем работать stat -L разыменовать ссылки, которые дадут ошибку, если связь будет разорвана.

Относительно второй части Вашего вопроса, media каталогом часто управляют какие-то утилиты автоматического монтирования. /media/hdd запись может использоваться Вашей системой для устройств массового хранения USB или могла бы даже ожидать правильного вида жесткого диска (ATA по сравнению с SCSI по сравнению с блочным устройством Xen). Неработающие ссылки ничего не повредят, если программа не попытается использовать их, и ссылки медиа действительно для Вашего удобства. Можно безопасно уехать /hdd свяжите или удалите его как Вам нравится.

3
27.01.2020, 19:38
  • 1
    Вы правы, похож на файл, не команда здесь, говорит он -sh: file: not found когда я делаю file и войдите. –  Samir 28.09.2012, 00:32
  • 2
    Отчасти Кажется, что Ваш $PATH немного ограничивается. Попытайтесь выполнить его непосредственно вместо этого: /usr/bin/file –  joruffin 28.09.2012, 00:38
  • 3
    , который я вижу из Вашего другого комментария, что Вы находитесь на поле вершины набора. Это ничего не может иметь кроме Busybox, установленного, и Busybox не эмулирует file команда, но действительно имеет поддержку stat управляйте, было ли это скомпилировано в. Это все еще может быть вне Вашего $PATH, или живущий где-нибудь неясный как/sbin/stat или/usr/sbin/stat. –  joruffin 28.09.2012, 00:48
  • 4
    Не похоже, что это имеет поддержку также file или stat. Я зарегистрировался в путях, которые Вы упоминаете (см. снимок экрана выше). Так или иначе... то, что Вы говорите, то, что в идеальной системе Linux, file команда, сопровождаемая путем поиска конечного файла или папки, показала бы мне, какой объект это? –  Samir 28.09.2012, 01:10
  • 5
    Что касается поддерживаемых команд в Busybox можно работать /usr/bin/busybox и это покажет Вам все команды, которых это имеет поддержку, даже если команды не установлены. Для использования busybox управляют, чтобы можно было работать /usr/bin/busybox <command> <parameters>. Таким образом, если это говорит, что поддерживает статистику, управляют, чтобы Вы могли бы работать /usr/bin/busybox stat /hdd. Для легкого использования можно создать символьные ссылки для Busybox с названием команды для вызова. Если это поддерживает команду статистики, Вы могли бы помочь работать с ln -s /usr/bin/busybox /usr/bin/stat. –  joruffin 28.09.2012, 01:54

Можно использовать файл, статистику или ls.

файл:

Команда файла используется для классификации файлов на основе их типа (символьная ссылка, каталог, устройство) или содержание (текст, gzip, изображение, tar..., независимо от их расширения):

$ file /dev/stdout
/dev/stdout: symbolic link to `/proc/self/fd/1'
$ file /proc/self/fd/1
/proc/self/fd/1: symbolic link to `/dev/pts/0'
$ file /dev/pts/0
/dev/pts/0: character special (136/0)
$ file /etc/passwd
/etc/passwd: ASCII text

ls:

$ ls -al /dev/stdout
lrwxrwxrwx 1 root root 15 Jan 27 07:55 /dev/stdout -> /proc/self/fd/1

статистика:

команда статистики распечатывает метаданные файла как полномочия, размер, количество блоков и так далее...

$ stat /dev/stdout
  File: ‘/dev/stdout’ -> ‘/proc/self/fd/1’
  Size: 15          Blocks: 0          IO Block: 4096   symbolic link
Device: 5h/5d   Inode: 1212        Links: 1
Access: (0777/lrwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2014-01-27 11:22:47.971187828 -0200
Modify: 2014-01-27 07:55:13.996981285 -0200
Change: 2014-01-27 07:55:13.996981285 -0200
 Birth: -
29
27.01.2020, 19:38
  • 1
    Что делает file hdd обратиться к? Я не получаю его... –  Samir 28.09.2012, 00:19
  • 2
    stat hdd дает мне -sh: stat: not found. –  Samir 28.09.2012, 00:21
  • 3
    я думаю, что у Вас нет команды статистики (или это не находится в Вашем $PATH). Так или иначе команда файла может дать Вам выстрел... –  filipenf 03.10.2012, 19:47
  • 4
    Для удара на терминале Mac команда файла следует за символьными ссылками по умолчанию. Если Вы хотите видеть, является ли это символьная ссылка, добавляет команда-h. Который не следует за символьными ссылками. –  ClintM 17.02.2016, 16:26
  1. Да голубой символьные ссылки
  2. Для наблюдения, где они указывают: ls -Fal
  3. Вывод ls -Fal /media

Это - propably автоточка монтирования некоторого вида.

grep media /etc/auto* мог бы произвести хит.

1
27.01.2020, 19:38
  • 1
    Что такое автоточка монтирования? Вы имеете в виду как..., когда я включаю физический дисковод SATA, он смонтирован к этой точке?... это - STB Linux, и он не имеет никакого встроенного жесткого диска, но он действительно показывает eSATA порт на спине. Это могло бы быть выделено с этой целью. –  Samir 28.09.2012, 00:30
  • 2
    @Sammy Да /media стандартная точка монтирования для устройств PnP. –  Nils 01.10.2012, 00:10

Теги

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