Еще 2 способа командой find
:
find -type f -name "index.php" -exec grep -l 'hello' {} \;
find -type f -name "index.php" -exec grep -q 'hello' {} \; -print
Похоже, что переименование файла после завершения загрузки является опцией, поскольку переименование является атомарной операцией. Насколько я понимаю, проверка целостности zip не гарантирует, что файл скачан полностью -, существует очень небольшая вероятность того, что часть файла также является правильным zip файлом. Но, в любом случае, мне нравится идея Drawbenn проверить эту целостность для дополнительной безопасности. Итак, благодаря ответам icarus и Drawbenn я пришел к окончательному решению:
gzip -c -9 %p | ssh user@server 'set -e; cat > /var/tmp/file.txt.part; gzip -t /var/tmp/file.txt.part; sync /var/tmp/file.txt.part; mv /var/tmp/file.txt.part /var/tmp/file.txt'
С точки зрения процесса cat
это просто копирование данных из стандартного ввода в стандартный вывод, и он ничего не знает о том, являются ли данные вообще, и в частности, являются ли они полными или нет. Таким образом, ответ на ваш вопрос нет это не стратегия «все или ничего».
Вы можете сделать что-то в 2 шага, что сделает его более надежным.
#/bin/bash
set -e
set -o pipefail
gzip -c -9 %p | ssh user@server "cat > backupPath.tmp"
ssh user@server "mv backupPath.tmp backupPath"
Обратите внимание, что %p
был скопирован из исходного сообщения, это не синтаксис оболочки.