Поиск файлов с прописными буквами перед расширением и строчными буквами в расширении

Нажмите Alt + F2, попробуйте запустить gksudo nm-connection-editor. Это должно позволить вам редактировать и сохранять все.

4
задан 6 November 2017 в 20:10

6 ответов

Используйте find для поиска файлов:

find . -regex ".*/[A-Z0-9]+\.[a-z]+"

Выполняет поиск в текущем каталоге (.), рекурсивно проходя через подкаталоги.

[.*/] охватывает путь к файлу [A-Z0-9] обозначает каждую букву от A до Z (включая, например, Å, как указано @vidarlo), и каждая цифра от 0 до 9 + соответствует предыдущему символу или выражению один или несколько раз \. ] - буквальная точка [a-z] обозначает каждую букву от a до z

. Для некоторых специальных символов может потребоваться использовать, например, [[:upper:]] вместо этого:

find . -regextype egrep -regex ".*/[[:upper:][:digit:]]+\.[[:lower:]]+"

Отредактированный вопрос

Для объединения тестов find есть -a и -o, для вашего примера это могло бы помочь:

find /mnt/ \( -name "*[a-z]*.*" -o -name "*.*[A-Z]*" \) -exec echo {} +
6
ответ дан 18 July 2018 в 03:47

Только с bash:

shopt -s extglob nullglob cd /mnt # just print the "good" files printf "%s\n" +([[:upper:][:digit:]]).+([[:lower:]]) # or, report on all files for f in *; do if [[ $f == +([[:upper:][:digit:]]).+([[:lower:]]) ]]; then echo "OK: $f" else echo "**: $f" fi done

См. «Сопоставление шаблонов» в руководстве bash.

4
ответ дан 18 July 2018 в 03:47

find с использованием shellscript

Попробуйте, если работает следующий метод с командой find и shellscript. Вы можете изменить

командную строку find и shellscript (например, вывод)

в соответствии с тем, что вы хотите.

find -type f -exec ./checker {} \; | sort

где checker содержит

#!/bin/bash if [ $# -ne 1 ] then echo "Usage: $0 <filename>" echo "Enter the file name as a parameter" exit fi inversvid="\0033[7m" redback="\0033[1;37;41m" resetvid="\0033[0m" filnam=${1##*/} name=${filnam%\.*} upnam=${name^^} ext=${filnam##*.} loex=${ext,,} if [ "${filnam^^}" == "$upnam" ] then corrfile=$upnam else corrfile="$upnam.$loex" fi if [ "$corrfile" == "$filnam" ] then echo -e " good match: '$filnam'" else echo -e "$redback bad match: '$filnam' does not match '$corrfile' $resetvid" fi

Я выполнил checker исполняемый файл и назову его локально. Вы можете поместить его в ~/bin, который переводит его в PATH, чтобы вы могли его вызвать с помощью checker.

chmod ugo+x checker

Тест

3
ответ дан 18 July 2018 в 03:47

Используйте find для поиска файлов:

find . -regex ".*/[A-Z0-9]+\.[a-z]+"

Выполняет поиск в текущем каталоге (.), рекурсивно проходя через подкаталоги.

[.*/] охватывает путь к файлу [A-Z0-9] обозначает каждую букву от A до Z (включая, например, Å, как указано @vidarlo), и каждая цифра от 0 до 9 + соответствует предыдущему символу или выражению один или несколько раз \. ] - буквальная точка [a-z] обозначает каждую букву от a до z

. Для некоторых специальных символов может потребоваться использовать, например, [[:upper:]] вместо этого:

find . -regextype egrep -regex ".*/[[:upper:][:digit:]]+\.[[:lower:]]+"

Отредактированный вопрос

Для объединения тестов find есть -a и -o, для вашего примера это могло бы помочь:

find /mnt/ \( -name "*[a-z]*.*" -o -name "*.*[A-Z]*" \) -exec echo {} +
6
ответ дан 24 July 2018 в 17:55

Только с bash:

shopt -s extglob nullglob cd /mnt # just print the "good" files printf "%s\n" +([[:upper:][:digit:]]).+([[:lower:]]) # or, report on all files for f in *; do if [[ $f == +([[:upper:][:digit:]]).+([[:lower:]]) ]]; then echo "OK: $f" else echo "**: $f" fi done

См. «Сопоставление шаблонов» в руководстве bash.

4
ответ дан 24 July 2018 в 17:55
  • 1
    Спасибо вам @glenn jackman, я получаю сообщение об ошибке, когда я пытаюсь запустить & quot; report & quot; только строка: строка 1: синтаксическая ошибка рядом с неожиданным токеном do line 1: для f в *; делать – yarone 6 November 2017 в 19:43
  • 2
    Форматирование сообщений об ошибках не работает в комментарии. Убедитесь, что в вашем файле нет окончаний строки CRLF. – glenn jackman 6 November 2017 в 20:12
  • 3
    Привет @glenn jackman, могу ли я запустить «отчет о файлах ail»? только сам по себе? я попытался проверить его в shellcheck, и это дало мне ошибку. – yarone 6 November 2017 в 22:10
  • 4
    какая ошибка дает вам shellcheck? – glenn jackman 6 November 2017 в 22:50
  • 5
    Стоит отметить, что это не рекурсирует в подкаталоги, в отличие от ответов find. Что может или не желательно в зависимости от контекста. +1. – MvG 7 November 2017 в 03:08

find с использованием shellscript

Попробуйте, если работает следующий метод с командой find и shellscript. Вы можете изменить

командную строку find и shellscript (например, вывод)

в соответствии с тем, что вы хотите.

find -type f -exec ./checker {} \; | sort

где checker содержит

#!/bin/bash if [ $# -ne 1 ] then echo "Usage: $0 <filename>" echo "Enter the file name as a parameter" exit fi inversvid="\0033[7m" redback="\0033[1;37;41m" resetvid="\0033[0m" filnam=${1##*/} name=${filnam%\.*} upnam=${name^^} ext=${filnam##*.} loex=${ext,,} if [ "${filnam^^}" == "$upnam" ] then corrfile=$upnam else corrfile="$upnam.$loex" fi if [ "$corrfile" == "$filnam" ] then echo -e " good match: '$filnam'" else echo -e "$redback bad match: '$filnam' does not match '$corrfile' $resetvid" fi

Я выполнил checker исполняемый файл и назову его локально. Вы можете поместить его в ~/bin, который переводит его в PATH, чтобы вы могли его вызвать с помощью checker.

chmod ugo+x checker

Тест

3
ответ дан 24 July 2018 в 17:55
  • 1
    Спасибо @sudodus, я вызывающе использую это для анализа проблем! Мне нужен очень простой скрипт для мониторинга программного обеспечения, и поэтому ответ на результаты, которые больше всего возвращают из одного и того же сценария, например, если имя файла содержит небольшую букву и / или расширение файла, содержит заглавную букву, а затем проблему эха. – yarone 6 November 2017 в 18:09
  • 2
    Я улучшил ответ, стоит проверить новую версию скрипта. – sudodus 6 November 2017 в 19:32
  • 3
    Привет @sudodus, когда я пытаюсь запустить сценарий, я получаю сообщение об ошибке: find -type f -exec ./checker {} \; | sort find: `./checker ': нет такого файла или каталога – yarone 6 November 2017 в 19:58
  • 4
    @yarone, Чтобы запустить ./checker: 1. Сделать его исполняемым, chmod ugo+x checker; 2. Используйте правильный путь, ./ означает, что он находится в текущем каталоге. Вы можете использовать полный путь, /full-path-whatever-it-is/checker; 3. Вы можете создать ~/bin и поместить checker в ~/bin, что приведет его к PATH, чтобы вы могли вызвать его с помощью checker (после перезагрузки). После этого вы можете поместить все свои скрипты и собственные исполняемые программы в ~/bin и запустить их (без перезагрузки). – sudodus 6 November 2017 в 20:09
  • 5
    Привет @sudodus im работает ./checker из своего текущего местоположения, кроме того, ive попытался заменить ./checker другим скриптом, который работает наверняка и по-прежнему те же ошибки, im не уверен, в чем проблема. – yarone 6 November 2017 в 20:44

Другие вопросы по тегам:

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