Cat файлы в подпапках в порядке, указанном в списке

Lo que el tutorial de Digital Ocean no menciona es eliminar el uso predeterminado procmail. Sin embargo, afortunadamente la documentación de Ubuntu Wiki sobre una configuración básica de postfijolo menciona.

Postfix por defecto usa procmailpara la entrega al usuario local. Desafortunadamente, procmailadmite el antiguo estilo -mboxy no Maildir. Necesitamos decirle a Postfix que no use procmail.

Su configuración de Postfix debe tener las siguientes dos líneas para usar correctamente Maildir con Postfix:

home_mailbox = Maildir/
mailbox_command = 

La ​​directiva mailbox_commandse establece intencionalmente igual a nada.

Una vez que esto está configurado, puede simplemente hacersudo systemctl restart postfix(o el método más tradicional sudo service postfix restart, que llama al comando systemctlmencionado anteriormente ). Entonces debería tener Maildir funcionando correctamente.

4
29.06.2019, 01:05
3 ответа

Чтобы ответить на следующий -немного другой вопрос:

I'm still wondering how would be if my subdirectories didn't have same names as in list though....

Сделаем некоторые предположения:

  • Все подкаталоги xявляются честной игрой.
  • Все .pestфайлы являются честной игрой.
  • Если у вас есть два .pestфайла с одинаковым именем (, но в разных каталогах ), вам все равно, в каком порядке эти два файла будут catредактированы.

Тогда у вас есть:

while read -r name; do
    cat x/*/"$name.pest"
done <y/list >concatenated.pest

Добавление проверки работоспособности немного сложнее, но все же выполнимо. (Я не буду заниматься этой частью, так как не знаю, соответствуют ли мои предположения вашему варианту использования.)

6
27.01.2020, 20:45

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

.
#!/bin/sh

while read -r name; do
    cat "x/$name/$name.pest"
done <y/list >concatenated.pest

Это объединит все соответствующие файлы .pestи создаст из них один файл с именем concatenated.pestв текущем каталоге в порядке чтения из y/list.

С небольшой проверкой:

#!/bin/sh

while read -r name; do
    pathname="x/$name/$name.pest"

    if [ ! -f "$pathname" ]; then
        printf 'Can not find %s\n' "$pathname"
        echo 'Output file will be incomplete'
        exit 1
    fi >&2

    cat "$pathname"
done <y/list >concatenated.pest
7
27.01.2020, 20:45

Поскольку вы можете передать несколько файлов в cat, было бы неплохо запустить только один экземпляр после некоторого искажения имени пути:

sed 's|.*|x/&/&.pest|' < y/filename-list.txt | xargs -d '\n' cat

Пояснение:

  • sed 's|A|B|'заменяет все вхождения Aна B.

    • Здесь A — это .*, который соответствует любой последовательности символов независимо от длины или содержимого.

    • &в B является заполнителем для всего текста, совпадающего с A.

  • xargs [OPTIONS...] COMMAND [ARGS...]запускает COMMAND [ARGS...]после добавления маркеров стандартного входного потока к команде.

    • Обычно токены разделяются белым -пробелом в любом количестве. Использование -dуказывает xargsиспользовать другой разделитель, в данном случае \n, символ новой строки.

    • Если ваша установка xargsне поддерживает -d, вам необходимо убедиться, что входные токены не содержат пробелов -. В Linux обычно у вас будет GNU xargs, который поддерживает -d.

4
27.01.2020, 20:45

Теги

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