Можете ли вы удобно переименовать файл без изменения каталога?

Труба проходит с двух сторон параллельно. Способ, которым вы пытаетесь это сделать, концептуально невозможен :вы не можете проверить статус команды mysqldumpдо ее завершения, если вы выполняете этот тест параллельно с выполнением mysqldump. Вам нужно запустить mysqldump, дождаться его завершения и , затем решить, запускать ли gzip.

Поскольку mysqldumpдолжен закончить работу, его вывод должен куда-то идти. Предположительно, вы ожидаете, что результат будет большим, так как вы его сжимаете. Поэтому разумный вариант — сжать его. Поэтому безоговорочно сжимайте вывод.

mysqldump -u username -ppassword dbname | gzip > test.gz

Обратите внимание, что я использовал |, а не |&. Использование |&здесь не имеет смысла :если есть какие-либо сообщения об ошибках, они в конечном итоге смешаются с дампом, и восстановить дамп будет невозможно.

Проблема, которую еще предстоит решить, заключается в том, чтобы определить, удалось ли mysqldump. Предполагая, что это сценарий bash или ksh (, т. е. он начинается с #!/bin/bashили #!/bin/kshили подобного, а не с #!/bin/sh), установите параметр pipefail, чтобы конвейер давал сбой при сбое какой-либо части. (По умолчанию состоянием конвейера является состояние его самой правой команды, а состояние других команд игнорируется.)

#!/bin/bash
set -o pipefail -o errexit
tmp="mydump.tmp.$$.gz"
trap 'rm -f "$tmp"' ERR INT TERM HUP
mysqldump … | gzip >"$tmp"
mv "$tmp" mydump.gz

Установка параметра errexitгарантирует, что в случае сбоя конвейера сценарий завершится в этой точке (с тем же статусом ошибки, что и конвейер ). Таким образом, файл с именем mydump.gzсоздается только в случае успешного создания дампа. Команда trapустанавливает ловушку, так что в случае сбоя сценария или его уничтожения одним из перечисленных сигналов временный файл удаляется.

0
20.11.2019, 18:47
2 ответа

Использовать расширение фигурной скобки:

mv -some_flag db/migrations/abc_201911{201243,01090000}.php
6
28.01.2020, 02:14

Думаю, я уже нашел подходящее решение :вы меняете каталог и затем возвращаетесь .

cd db/migrations/ && mv abc_201911201243.php abc_20191101090000.php && cd ~-
-1
28.01.2020, 02:14

Теги

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