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 postfijosí lo menciona.
Postfix por defecto usa procmail
para la entrega al usuario local. Desafortunadamente, procmail
admite el antiguo estilo -mbox
y 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_command
se 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 systemctl
mencionado anteriormente ). Entonces debería tener Maildir funcionando correctamente.
Чтобы ответить на следующий -немного другой вопрос:
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
Добавление проверки работоспособности немного сложнее, но все же выполнимо. (Я не буду заниматься этой частью, так как не знаю, соответствуют ли мои предположения вашему варианту использования.)
У вас есть порядок в списке, поэтому не сопоставляйте имена файлов с шаблоном подстановки имен файлов. Вместо этого создайте имена из строк, считанных из списка :
.#!/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
Поскольку вы можете передать несколько файлов в 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
.