Assumindo que você esteja em um sistema Linux, ou pelo menos que você tenha o GNU touch e o GNU date , você pode fazer (no bash; zsh é o mesmo, mas não precisa do shopt globstar ):
$ shopt globstar
$ for f in **; do
touch -d "$(date -d "$(stat -c '%y' "$f") +3 months")" "$f"
done
Isso, no entanto, irá ignorar arquivos ocultos. Para corresponder a esses também, execute shopt -s dotglob antes dos comandos acima.
Explicação
-
shopt -s globstar: Isso define a opçãoglobstardo bash, o que significa que**corresponderá a todos os arquivos e zero ou mais diretórios e subdiretórios. -
shopt -s dotglob: faz com que*(e**) também correspondam aos arquivos cujos nomes começam com.. -
for f in **; do ...; done: iterar todos os arquivos e diretórios , salvando-os como$f. -
stat -c '%y' "$f": esta é a hora atual do arquivo ou diretório atual. -
date -d $(...) +3 months: imprime a data que é três meses após a string dada (neste caso, essa string é a saída do comandostatem$f).
Todos juntos, os itens acima encontrarão a data de modificação de cada arquivo ou diretório na pasta atual (incluindo todos os subdiretórios) e definirão sua data três meses depois do que for agora.