Найти файлы внутри пронумерованных каталогов

@MartinVegter

Есть файл ~/.config/gtk-2.0/gtkfilechooser.ini. Он должен выглядеть так, как написал Stefano:

[Filechooser settings]
LocationMode=path-bar
ShowHidden=false
ShowSizeColumn=true
GeometryX=377
GeometryY=132
GeometryWidth=612
GeometryHeight=528
SortColumn=name
SortOrder=ascending
StartupMode=recent

В этом файле не было переменной DefaultFolder, но я нашел переменную StartupMode=recent, которую я изменил на StartupMode=cwd. Это работает только на приложениях GTK 2, таких как mousepad.

Я не знаю, есть ли файл настроек для приложений GTK 3, таких как gedit, но кажется, что файловый переключатель GTK 3 уже устанавливает расположение в текущую папку по умолчанию.

0
03.03.2019, 03:04
2 ответа
ls */

Это выведет список содержимого всех не -скрытых подкаталогов в текущем каталоге. Поскольку у вас есть только подкаталоги с числовыми именами, это покажет их содержимое.

Шаблон подстановки оболочки *будет распространяться на все не -скрытые имена в текущем каталоге. Добавление /в конце шаблона заставляет шаблон расширяться только до каталогов (, поскольку каталоги, отличные от -, не могут иметь /в своих именах ).

В оболочке zshследующий шаблон подстановки имен файлов будет расширяться только до обычных файлов в каждом подкаталоге

*/*(.)

Чтобы сделать что-то с этими именами, которые совпадают, вы должны перебрать расширение этого шаблона глобуса:

for pathname in */*(.); do
    # use "$pathname" here
done

В bashили shвы должны вместо этого вызвать небольшой скрипт из find:

find. -mindepth 2 -maxdepth 2 -type f -exec sh '
    for pathname do
        # use "$pathname" here
    done' sh {} +

Но на самом деле это просто причудливая манера письма

for pathname in */*; do
    [ ! -f "$pathname" ] && continue
    # use "$pathname" here
done

за исключением того, что вариант findбудет пропускать символические ссылки на обычные файлы и включать скрытые имена (установите параметр оболочки dotglobв bash, чтобы включить эти ).

Опять же, это сделало бы то, что вы хотели (искать в каталогах с числовыми именами, )потому что у вас есть только подкаталоги с числовыми именами.

Предполагая, что могут быть и другие подкаталоги,

for pathname in */*; do
    [ ! -f "$pathname" ] && continue
    case $(dirname "$pathname") in
        *[!0-9]*) continue
    esac
    # use "$pathname" here
done

или с bash,

for pathname in */*; do
    if [ ! -f "$pathname" ] ||
       [[ $(dirname "$pathname") == *[!0-9]* ]]
    then
        continue
    fi
    # use "$pathname" here
done

Эти циклы будут перебирать все имена в подкаталогах,но пропустит любое имя, не относящееся к обычному файлу (или символическую ссылку на один из них ), а также пропустит любой файл в подкаталоге, имя которого содержит что-либо, кроме цифры.

С опцией оболочки extglobв bashвы можете сделать это немного короче:

shopt -s exglob
for pathname in +([0-9])/*
    [ ! -f "$pathname" ] && continue
    # use "$pathname" here
done

Шаблон +([0-9)/будет распространяться на имена каталогов, в именах которых есть только цифры. Это также будет работать в zsh, если вместо extglobбудет установлена ​​опция KSH_GLOB.

С помощью GNU findвы, очевидно, могли выбрать свои числовые каталоги, а затем просмотреть их содержимое в цикле:

find. -maxdepth 1 -type d -regex '.*/[0-9]+$' -exec sh '
    for dirpath do
        for pathname in "$dirpath"/*; do
            [ ! -f "$pathname" ] && continue
            # use "$pathname" here
        done
    done' sh +

но обычно я не рекомендую использовать регулярные выражения для имен файлов или каталогов, поскольку они в основном предназначены для сопоставления текста в текстовых файлах. GNU findявно поддерживает сопоставление путей с регулярными выражениями, потому что программное обеспечение GNU старается быть как можно более удобным.

0
28.01.2020, 02:40

Вы получаете эти результаты, потому что findпросматривает все содержимое текущего каталога, если не указано иное. Если вы просто хотите увидеть файлы внутри пронумерованных каталогов с именем 6 -11, которые находятся в текущем каталоге, тогда все, что вам нужно, это:

Поскольку нет 9, вы можете использовать этот:

find {6,7,8,10,11} -type f

Это расширит только включенные номера.

Если у вас было от 6 -11 со всеми числами между ними:

find {6..11} -type f

Это будет искать только в каталогах с именем 6 -11 и возвращать файлы внутри.

Если это единственные каталоги внутри текущего каталога,который выглядит так в соответствии с вашими результатами, то вы также можете просто сделать это:

find. -mindepth 2 -type f

Это укажет ему начать на один уровень ниже текущего каталога или на два уровня глубже.

1
28.01.2020, 02:40

Теги

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