Если Вы имеете rsync
(удалите --dry-run
сделать это для реального):
rsync --dry-run --remove-source-files -avHAX /unencrypted/ /encrypted
Иначе, с помощью bash4 + и статистика GNU:
#!/bin/bash
set -e
shopt -s nullglob globstar
for from in /unencrypted/**/*; do
to="${from/\/un//}"
if [[ -d "$from" ]]; then
echo mkdir -p "$to"
echo chmod "$(stat -c %a "$from")" "$to"
echo chown "$(stat -c %u:%g "$from")" "$to"
else
echo cp -a "$from" "$to" && echo rm "$from"
fi
done
echo rm -r /unencrypted
Для выполнения его для реального удалить echo
от каждой команды.
Один из подходов:
while read -r line; do rm -rf "${line%%/*}"; done < <(find . -type f -mtime +180 -printf "%P\n")
Перенаправить в чтение
и выполнить соответствующую команду.
С помощью инструментов GNU:
for d in Dir*; do
find "$d" -mindepth 1 -mtime -180 -print -quit | grep -q . ||
echo rm -rf "$d"
done
Удалите echo
, когда это будет сделано. Удалите -q
, чтобы узнать, почему каталог не удаляется.