Вот 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
)
удар:
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
Самый легкий способ видеть, какой объект данный файл, состоял бы в том, чтобы использовать 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
свяжите или удалите его как Вам нравится.
-sh: file: not found
когда я делаю file
и войдите.
– Samir
28.09.2012, 00:32
/usr/bin/file
– joruffin
28.09.2012, 00:38
file
команда, но действительно имеет поддержку stat
управляйте, было ли это скомпилировано в. Это все еще может быть вне Вашего $PATH, или живущий где-нибудь неясный как/sbin/stat или/usr/sbin/stat.
– joruffin
28.09.2012, 00:48
file
или stat
. Я зарегистрировался в путях, которые Вы упоминаете (см. снимок экрана выше). Так или иначе... то, что Вы говорите, то, что в идеальной системе Linux, file
команда, сопровождаемая путем поиска конечного файла или папки, показала бы мне, какой объект это?
– Samir
28.09.2012, 01:10
/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: -
ls -Fal
ls -Fal /media
Это - propably автоточка монтирования некоторого вида.
grep media /etc/auto*
мог бы произвести хит.