Удалите каталоги Linux, содержащие ТОЛЬКО старые файлы

Если Вы имеете 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 от каждой команды.

5
06.05.2014, 19:33
2 ответа

Один из подходов:

while read -r line; do rm -rf "${line%%/*}"; done < <(find . -type f -mtime +180 -printf "%P\n")

Перенаправить в чтение и выполнить соответствующую команду.

1
27.01.2020, 20:37

С помощью инструментов GNU:

for d in Dir*; do
  find "$d" -mindepth 1 -mtime -180 -print -quit | grep -q . ||
    echo rm -rf "$d"
done

Удалите echo, когда это будет сделано. Удалите -q, чтобы узнать, почему каталог не удаляется.

6
27.01.2020, 20:37

Теги

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