Как получить список файлов, которые соответствуют некоторому шаблону?

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

Обновление: Я хочу решение в чистом vimscript, так, чтобы это зависело от только энергии.

Update2:

Ожидаемый вывод функции шарика

Рассмотрите следующий сценарий:

:!touch /test ; mkdir /test$'\n' ; touch /test$'\n'/test
:echo glob('/**/test')
/test
/test
/test

Это - вывод glob функция. Я хочу это быть следующим:

:echo NewGlob('/**/test')
['/test', '/test
/test']
1
задан ZyX 3 July 2010 в 17:48
поделиться

3 ответа

Попробуйте эту программу на питоне. Она будет соответствовать файлам типа abc\n1, abc\n2abc и т.д.

#!/usr/bin/env python
import os, re
dirlist = os.listdir('.')
pattern = 'abc\n\\d'
for fname in dirlist:
  if re.search(pattern, fname):
    print fname.replace('\n', '\\n')

Он заменит символы конца строки ('\n') на "\n" для ясности.

0
ответ дан 2 September 2019 в 23:29
поделиться

вы можете попробовать использовать ls с параметром -b . проверьте страницу руководства

1
ответ дан 2 September 2019 в 23:29
поделиться
:echo split( glob("pattern", '.'), "\r")

Если вы хотите, чтобы шаблон соответствовал файлам, содержащим \ n исключительно, используйте "* \ n *" .


РЕДАКТИРОВАТЬ:

Я вижу, символ, который вы используете в имени файла, такой же, как тот, который используется glob () для различения результатов. Как следствие, мы не можем полагаться на glob () . ghostdog74 дал хороший ответ тогда:

:echo split( system('ls -1bd test*'), "\n")  

Конечно, это не переносимо. Но на самом деле я не называю это общим случаем - я никогда не видел таких имен. Если glob () не может справиться с этим общим случаем, то необходимо исправить glob () .

Может быть, вы можете попробовать со встроенным питоном или рубином, как предложил Арнольд. Но это тоже не переносимо.

1
ответ дан 2 September 2019 в 23:29
поделиться