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çãoglobstar
do 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 comandostat
em$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.