Поиск каталогов без особых случаев?

Perl в помощь:

perl -ne '($t, $r) = /([0-9]+\s+)(.*)/;
          print "$pt$p\n$_" if $r ne $p;
          $p = $r;
          $pt = $t;
          }{
          print $t, $r' input-file \
| sort -nu | tail -n+2
  • -n читает ввод построчно.
  • $t - метка времени плюс пробелы, $r - "остаток".
  • $p - предыдущий остаток, $pt - предыдущая временная метка.
  • последняя строка всегда печатается

Perl печатает некоторые строки дважды, sort -nu должен удалить дубликаты. tail удаляет первую пустую строку.

0
13.09.2018, 18:12
2 ответа

Вместо

if [ -d abc ] ; then
    echo 'Directory exists'

использовать

if /bin/ls -d [aA][bB][cC]/ &> /dev/null ; then
    echo 'Directory exists'
2
28.01.2020, 02:16

Вbash:

shopt -s nullglob nocaseglob
set -- [a]bc/
if [ "$#" -gt 0 ]; then
    echo 'There is at least one directory called "abc" (case ignored):'
    printf '\t%s\n' "$@"
fi

Два bashпараметра оболочки nullglobи nocaseglobиспользуются здесь, чтобы проверить, существует ли какой-либо каталог, соответствующий шаблону [a]bc/, независимо от случая -. Параметр nullglobобеспечивает удаление шаблона при отсутствии совпадений (, в противном случае он остается нераскрытым ), а параметр nocaseglobделает совпадения шаблонов нечувствительными к регистру.

Мы используем [a]bc/вместо простого abc, чтобы вызвать сопоставление имен файлов только с каталогами. С помощью [a]мы заставляем оболочку выполнять подстановку и, таким образом, подбираем все совпадающие имена, а с завершающим /мы ограничиваем сопоставление только каталогами. Выполнение этого в качестве аргумента для setустанавливает позиционные параметры в соответствующие имена каталогов. Затем они доступны в $@, а количество совпадений находится в $#.

Тестирование:

$ mkdir abc aBc ABc   # create three directories with only case diffs in their names
$ touch abC           #... and also a file

$ bash./script.sh
There is at least one directory called "abc" (case ignored):
        ABc/
        aBc/
        abc/
5
28.01.2020, 02:16

Теги

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