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

Следующий сценарий Python делает желаемую фильтрацию.

#!/usr/bin/python
import re

# Bibliography entries to retrieve
# Multiple pattern compilation from: http://stackoverflow.com/a/11693340/147021
pattern_strings = ['Author2010', 'Author2012',]
pattern_string = '|'.join(pattern_strings)
patterns = re.compile(pattern_string)


with open('bibliography.bib', 'r') as bib_file:
    keep_printing = False
    for line in bib_file:
        if patterns.findall(line):
            # Beginning of an entry
            keep_printing = True

        if line.strip() == '}':
            if keep_printing:
                print line
                # End of an entry -- should be the one which began earlier
                keep_printing = False

        if keep_printing:
            # The intermediate lines
            print line,

Лично, я предпочитаю перемещаться в язык сценариев, когда логика фильтрации становится сложной. Это, возможно, имеет преимущество на факторе удобочитаемости, по крайней мере.

2
12.08.2017, 17:05
2 ответа

Оболочки отслеживают символические ссылки в качестве удобства для пользователей. Это имеет приятный эффект, который CD Foo && CD. Всегда возвращается в исходный каталог, даже когда foo - это символическая ссылка на каталог. Он имеет два вида потенциалов: главное - это то, что другие программы не ведут себя таким образом; Кроме того, символическое отслеживание каталога вводит свои собственные проблемы (что происходит, когда символическая ссылка меняется? Что произойдет, если этот процесс не имеет разрешения на чтение SymLink? и т. Д.).

Оболочки могут сделать это только потому, что они отслеживают все изменения каталога, поэтому они помнят, как у вас там. Когда начинается новый процесс, он не получает эту историческую информацию. Под капотом он находит, где он движется вверх из текущего каталога, следуя .. Ссылки, пока он не попадает в root¹.

Если вы достигли каталога через символические ссылки, вы можете распечатать путь Man-SymLink с помощью встроенного PWD , вызывая PWD -P . Если вы вызываете другую программу из оболочки, не передавайте ее путь, который содержит .. После компонентов SymLink, поскольку программа будет интерпретировать ее по-разному. Вместо этого устраняют компоненты .. .. .. . . . . . компоненты, вызывая PWD -P :

cp "$(cd .. && pwd -P && echo /)test-parent.txt" .

Если вы хотите забыть о SymLinks, используемых в прошлом CD CD в сеансе оболочки , Вы можете запустить

cd "$(pwd -P && echo /.)"

. Это изменение в том, что уже является текущим каталогом, поэтому он не изменяет текущий каталог процесса оболочки, но он меняет путь, который оболочка отслеживается для текущего каталога, что делает его SymLink Отказ

¹ Так как работает getcwd . Некоторые ядра отслеживают текущий каталог, но не отслеживают символические ссылки, для обратной совместимости, если для какой-либо другой причины (но также из-за тонких краевых случаев с символическими ссылками).

2
27.01.2020, 22:00

Это связано с тем, что CP не играет ту же ссылку Игра Ваша оболочка. Ваша оболочка отслеживает ссылки с текущим рабочим каталогами в качестве подражания к текущему рабочему каталогу, но ядро ​​не хочет никакой из этой ерунды, когда оболочка идет на вызов CP - скорее ядро ​​будет Сделайте CP текущий рабочий каталог полностью квалифицированный абсолютный путь - и так его . Ссылки и ваша оболочка . Ссылки не одинаковы . .

Вы можете обеспечить абсолютный путь к текущему рабочему каталогу так же легко, как CD-P. И то же самое будет работать для любого другого каталога, такого как CD-P - / Any A / другой / каталог . Не менее используют PWD , чтобы распечатать абсолютный путь к . Как PWD -P , а во многих снарядах он будет изменен $ pwd на абсолютный путь (одинаково CD-P. делает) .

Например:

cd /tmp
mkdir -p parent child
cd parent
ln -s ../child child
touch ./child/somefile
cd -L child                  ###the default
printf %s\\n "$PWD"/*
cd -P .
printf %s\\n "$PWD"/*

вывод

/tmp/parent/child/somefile
/tmp/child/somefile
2
27.01.2020, 22:00

Теги

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