mv
либо берет один файл и перемещает или переименовывает его, либо берет несколько файлов или каталогов и перемещает их в каталог. Вы не можете переименовать несколько файлов с помощью mv
.
Вместо этого:
for name in *.*.fasta.gz; do
newname=${name%.fasta.gz} # remove filename suffix
newname=${newname//./_}.fasta.gz # replace dots with underscores and add suffix
mv -i -- "$name" "$newname"
done
Это приведет к перебору всех ваших сжатых файлов fasta в текущем каталоге, содержащих хотя бы одну точку в другом месте имени, кроме суффикса имени файла. Это удалит известный суффикс имени файла (, в котором точки не должны заменяться символами подчеркивания ), а затем заменит все точки символами подчеркивания в оставшемся бите и re -прикрепит суффикс.
Окончательная замена будет работать в оболочке bash
, но, возможно, не будет работать в оболочке /bin/sh
.
mv -i
используется для переименования файла (запросит подтверждение, если новое имя уже существует ). Двойное тире(--
)используется только в том случае, если какое-либо из имен начинается с тире (, они потенциально могут быть восприняты как наборы опций для mv
, а двойное тире предотвращает это ).
Мне нравится ваша вступительная фраза.
У меня была аналогичная проблема, я использовал следующий макрос в своем основном разделе конфигурации:
DKIM_DOMAIN = ${lc:${domain_data:$h_from:}}
DKIM_SELECTOR = ${lookup{$dkim_domain} lsearch {/etc/exim4/dkim/tags} {$value} {defaultdkimtag}}
Вместе с файлом /etc/exim4/dkim/tags
, который выглядит как:
mydomain.org: sometag
myotherdomain.org: 12345
Но результат DKIM_DOMAIN
является «испорченным», потому что $h_from
установлен (потенциальным )злоумышленником. Чтобы не испортить его, вы должны заменить его известным -безопасным поиском.
Я сделал это так:
DKIM_DOMAIN = ${lookup{${lc:${domain:$h_from:}}} lsearch,ret=key {/etc/exim4/dkim/tags}}
$h_from
... ${domain:...}
. Это все равно будет испорчено. ${lc:...}
. Просто потому что. Все еще испорченный ret=key
, что означает, что ret urned значение из поиска будет «заменено не -испорченной версией ключа поиска» Ваша конфигурация была
DKIM_DOMAIN = ${sg{${lc:${domain_data:$h_from:}}}{^www\.}{}}
Похоже, что ${domain_data:$h_from:}
неверно-${domain_data:...}
не указано как расширение строки .$domain_data
— допустимая переменная, но это не то, что вы пытаетесь там сделать. -Я думаю, как и я, вы пытаетесь извлечь домен из $h_from
. Так что здесь, я думаю, вы должны использовать${domain:$h_from:}
(Я тоже не уверен, что такое двоеточие в конце, но я оставлю это вам)
Тогда у вас будет:
DKIM_DOMAIN = ${sg{${lc:${domain:$h_from:}}}{^www\.}{}}
Но это все равно будет испорчено, потому что вы разрешаете использовать любое внешнее значение в пути к файлу.
Итак, я бы предложил следующее решение:
FROM_DOMAIN_WITHOUT_WWW = ${sg{${lc:${domain:$h_from:}}}{^www\.}{}}
DKIM_DOMAIN = ${lookup{FROM_DOMAIN_WITHOUT_WWW} lsearch,ret=key {/etc/exim4/dkim/selector.map}}
Или, если вам не нравится лишний макрос:
DKIM_DOMAIN = ${lookup{${sg{${lc:${domain:$h_from:}}}{^www\.}{}}} lsearch,ret=key {/etc/exim4/dkim/selector.map}}