Найти файлы с минимальной длиной имени файла

Я попробовал следующие шаги, Вы упомянули выше, но не нашли удачи с успехом на этом. Все еще возвраты с той же строкой 55 ошибок в source.list.Here являются приложенным снимком экрана окна терминала. Взгляните на него -

ошибка, в то время как установка через командное окно

Здесь является моим sources.list, присоединенным, проверьте его

sources.list

4
задан 16.04.2020, 22:52

2 ответа

Вы можете использовать команду find с тестом -regex

$ find /path/to/folder -regextype posix-basic -regex '.*/.\{5,\}'

или

$ find /path/to/folder -regextype posix-extended -regex '.*/.{5,}'

Обратите внимание, что -regex является совпадением пути ], а не файл , совпадающий с - следовательно, вам нужно сопоставить и начальный .*/, перед именем файла с 5+ символами


В качестве альтернативы, для чистого bash В качестве решения, вы можете включить расширенную глобализацию оболочки , а затем использовать шаблон !(@(?|??|???|????)), означающий «все, что не соответствует ни одному, или двум, или трем, или четырем символам»

$ shopt -s extglob
$ ls -d /path/to/folder/!(@(?|??|???|????))

Если вы хотите чтобы включить подкаталоги, вы также можете включить опцию globstar и добавить подстановочный знак **, т.е.

$ shopt -s extglob globstar
$ ls -d /path/to/folder/**/!(@(?|??|???|????))

например

$ ls -d **/!(@(?|??|???|????))
abcde  abcdef  abcdefg  subdir  subdir/abcde  subdir/abcdef  subdir/abcdefg

, в то время как неинвертированные совпадения (файлы короче 5 символов) равны

$ ls -d **/@(?|??|???|????)
a  ab  abc  abcd  subdir/a  subdir/ab  subdir/abc  subdir/abcd

Для последующего сброса параметров, используйте

[ 116]
4
ответ дан 16.04.2020, 22:54
  • 1
    +1 Хорошее решение, хотя они don' t работают на n как минимум в целом. – iamtoc 16.04.2020, 22:54
  • 2
    Спасибо @htor - по размышлении, там doesn' t, кажется, любая причина предпочесть !(@(?|??|???|????)) по @Radu RДѓdeanu' s намного более простой ?????* - возможно, я должен удалить предложение? – iamtoc 16.04.2020, 22:54

Подход Python:

#!/usr/bin/env python
from __future__ import print_function
import os,sys


def main():
    treeroot = sys.argv[1]
    base_len = int(sys.argv[2])
    for dir,subdirs,files in os.walk(treeroot):
         for f in files: 
             if len(f) >= base_len:
                 fullpath = os.path.abspath(os.path.join(dir,f))
                 print(fullpath)

if __name__ == '__main__' : main()

Использование простое:

./find_files_len.py /path/to/top_directory/  minimal_length

Например:

./find_files_len.py /etc  5 

Это даст нам все файлы с базовым именем не менее 5 символов, найденных рекурсивно через /etc/ и все его подкаталоги. Обратите внимание, что полный путь к файлу будет напечатан в командной строке

0
ответ дан 16.04.2020, 22:53

Теги

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