Найти файлы, имя которых составляет 4 символа

Я хотел бы найти файлы, чье имя имеет всего 4 символа.

Например, в /tmp есть три файла:

 $ ls /tmp txt file linux 

Вывод должен показывать file только потому, что он имеет только 4 символа.

  • скопировать все файлы, не имеющие расширения
  • команда tar - пропустить символические ссылки
  • Фильтровать дубликаты имен файлов с помощью tar
  • Использовать все хосты, завершенные zsh для cssh
  • «Rm. *» Когда-либо удаляет родительский каталог?
  • Передача путей и имен файлов в программу из сценария bash
  • Ограничение поддержки символов ZSH, поддерживающее повторение?
  • Посмотрите, есть ли в папке несколько файлов с определенными расширениями
  • 9 Solutions collect form web for “Найти файлы, имя которых составляет 4 символа”

    Использовать ? подстановочный знак для файлового глобирования:

     ls -d /tmp/???? 

    Это приведет к печати всех файлов и каталогов, чье имя файла длится 4 символа.

    Как было предложено @roaima, флаг -d не позволит ls отображать содержимое подкаталогов, соответствующих шаблону.

    Список файлов только в /tmp :

     cd /tmp find . ! -name . -prune -path './????' -type f 

    Список файлов в /tmp рекурсивно:

     find /tmp -path '*/????' -type f 

    Пытаться:

     find /tmp -type f -print| awk -F/ ' length($NF) == 4 ' 

    Что делает awk :

    • Используя / как разделитель полей,
    • Поиск имени файла $NF (последнее поле)
    • length вычислений
    • И проверьте, если значение равно 4, а затем распечатайте его.

    Мне кажется, что это самый простой способ найти файл из четырех байтов:

     find /tmp -type f -size 4c 

    Изменить: найти имя файла из четырех байтов:

     find /tmp -type f -name '????' 

    Существует также решение perl (5.10 или новее):

     perl -E 'say for </tmp/????>;' 

    Немного более гибкая версия, где вы можете указать желаемую длину:

     perl -E 'my $w = "?" x shift; say for </tmp/$w>;' 4 

    Предполагая, что вы используете bash, вы можете сделать следующее:

     shopt -s globstar shopt -s nullglob filearray=(/tmp/**/????) 

    Это поместит список файлов, которые вы хотите в массив filearray . Новые строки (и другие экзотические символы) в имени файла будут обрабатываться правильно.

    Настройка globstar позволяет ** в шаблонах glob сопоставляться между подкаталогами, предоставляя требуемый рекурсивный поиск.

    Установка nullglob просто заставляет расширение расширяться до нуля, если совпадений нет. В противном случае он будет расширяться до себя, что, вероятно, не то, что вы хотите.

    «/ tmp /» принимает 5 символов. Вот почему в тестах «9» (5 + 4)

     for i in /tmp/* ; do [ "${#i}" -eq 9 ] && printf %s\\n "$i"; done 

    или

     for i in /tmp/* ; do i="${i#/tmp/}"; # to get rid of /tmp/ [[ "${#i}" -eq 4 ]] && printf %s\\n "$i"; # there is 4 in test! done 

    FWIW. Он не терпит неудачу в новой строке (@cuonglm), может быть легко преобразован в список только 140 символов длинных имен файлов (@don_crissti).

    Поскольку globbing выполняется оболочкой, нет необходимости звонить ls или find, echo делает трюк:

     $ echo /tmp/???? /tmp/file $ 

    Единственное, если нет файла с именем длиной 4 символа, он просто распечатает

     /tmp/???? 

    Возможно, вам понадобится однострочный скрипт bash, который проверяет это, а также печатает один файл в строке:

     pattern=/tmp/????? ; for f in $pattern ; do if [ $f != "$pattern" ] ; then echo $f ; fi ; done 

    Как насчет:

     ls /tmp | grep -e '^.\{4\}$' 

    для ответа на основе grep .

    Interesting Posts

    Как удаленно выполнять несколько команд на нескольких серверах?

    Поддерживает ли dpkg Debian время / дату изменения пакета (т.е. установка / очистка)?

    Как спросить Хром, куда он отправляет аудио?

    Как рисовать на графической консоли Linux?

    Ryzen Bzy_MHz низкий при разгоне

    Если, elif и другие скриптовые операторы Linux

    Имеют ли программы доступ к таким инструментам, как grep, sed, tr или sort из-за их эффективности?

    Почему linux-ядро использует код linux-libre для избавления от бинарных капель?

    Является ли ядро ​​Linux бесплатным для изменения?

    Можно ли изменить количество строк по умолчанию хвоста?

    Странные изменения в файлах

    Переписывание строк из финала

    При связывании настраивайте ли настройки (например, количество / размер очередей RX) непосредственно на интерфейсе главной связи или на подчиненных этажных интерфейсах?

    Я не могу отправить почту на адрес Gmail, используя Postfix

    Как просматривать и воспроизводить файлы .mov на Ubuntu 16.04 LTS

    Linux и Unix - лучшая ОС в мире.