Назад | Перейти на главную страницу

Резервное копирование старых каталогов с помощью сценария bash

Я пишу небольшой сценарий bash для архивации каталогов в сжатом формате в другое место, когда они старше определенного возраста и у меня возникают некоторые трудности. Вот что я делаю.

#!/bin/bash
# Archives completed CDP episodes to compressed storage. Will eventually expand to put these off-site as well.

InputDir="/home/wgant/stuff/"
OutputDir="/home/wgant/archived/"

find $InputDir$ -maxdepth 0 -mtime +1 -type d -exec echo $OutputDir${} \;

Я немного зеленоват в bash, поэтому я не тороплюсь. На первом этапе я просто хочу вывести список того, как будут называться выходные файлы. Однако, когда я запускаю вышеупомянутое, имена файлов правильные, но полный путь явно объединяется, чего я не хочу. Как мне просто вырезать имя файла?

Очевидно, как только это сработает, я вызову вызовы для создания архивов и удалю соответствующий каталог.

Синтаксис не совсем правильный, лучше так:

find $InputDir -maxdepth 0 -mtime +1 -type d -exec echo $OutputDir{} \;

Чтобы удалить префиксную часть путей, простой способ: cd в каталог перед выполнением find, как это:

InputDir="/home/wgant/stuff"
OutputDir="/home/wgant/archived"

(cd "$InputDir"; find . -maxdepth 0 -mtime +1 -type d -exec echo "$OutputDir"/{} \;)

Обратите внимание, что я заключил последнюю команду в (...). Это подоболочка, цель которой состоит в том, чтобы cd команда действует только внутри нее, остальная часть скрипта не будет затронута ею. Это важно, потому что изменение рабочего каталога с помощью cd не рекомендуется в сценариях. Обертывание внутри (...) делает это безопасным.