Как получить список файлов, которые соответствуют некоторому шаблону, если имена файлов могут содержать \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']
Попробуйте эту программу на питоне. Она будет соответствовать файлам типа 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
" для ясности.
вы можете попробовать использовать ls
с параметром -b
. проверьте страницу руководства
:echo split( glob("pattern", '.'), "\r")
Если вы хотите, чтобы шаблон соответствовал файлам, содержащим \ n
исключительно, используйте "* \ n *"
.
РЕДАКТИРОВАТЬ:
Я вижу, символ, который вы используете в имени файла, такой же, как тот, который используется glob ()
для различения результатов. Как следствие, мы не можем полагаться на glob ()
.
ghostdog74 дал хороший ответ тогда:
:echo split( system('ls -1bd test*'), "\n")
Конечно, это не переносимо. Но на самом деле я не называю это общим случаем - я никогда не видел таких имен. Если glob ()
не может справиться с этим общим случаем, то необходимо исправить glob ()
.
Может быть, вы можете попробовать со встроенным питоном или рубином, как предложил Арнольд. Но это тоже не переносимо.