find /some/where -type d \( -atime +1234 -o -mtime +1234 \) -print | ...
Gostaria de localizar pastas facilmente para arquivar / lixeira e uma maneira fácil de automatizar isso seria escolher pastas que eu não fazia uso há anos. Como as próprias pastas podem ter datas de modificação diferentes dos arquivos que contêm, estou pensando se já existe um comando * nix que faz isso para mim.
Caso contrário, suponho que eu possa escrever um script que primeiro localize diretórios que não tenham sido atualizados ou acessados antes de uma determinada data e, em seguida, percorra recursivamente seus conteúdos para garantir que eles também não tenham sido acessados ou modificados desde essa data. .
Mas se uma ferramenta como esta já existir, prefiro não reinventar a roda.
find /some/where -type d \( -atime +1234 -o -mtime +1234 \) -print | ...
O tempo de acesso em um diretório raramente é útil. Na primeira vez que você executar ls
ou find
no diretório, seu tempo de acesso será atualizado.
Você pode simplesmente procurar por arquivos que não foram acessados há muito tempo:
find . -type f -atime +999 -print
Se você estiver interessado apenas em diretórios em que nenhum dos arquivos foi acessado por um longo tempo, é possível combinar um comando find
para explorar diretórios e um comando find
para explorar arquivos em um diretório.
find . -type d -exec sh -c '
recent=$(find "$0" -mindepth 1 -maxdepth 1 ! -type f -atime +999 -print | head -n 1)
if [ -z "$recent" ]; then printf %s\n "$0"; fi
' {} +
Observe que esse snippet pode imprimir um diretório em que nenhum dos arquivos regulares foi acessado recentemente, mas há arquivos que foram acessados recentemente. Ignorá-los não é fácil com find
sozinho, a menos que você apenas remova -maxdepth 1
para percorrer os diretórios independentemente, o que acionaria muita atividade repetida no disco. Aqui está um script bash não testado que faz o diretório andar manualmente, mantendo o controle de quais diretórios contêm apenas arquivos que não foram acessados recentemente.
#!/bin/bash
shopt -s dotglob
explore () {
local entry keep=
for entry in "$1/"*; do
if [ -L "$entry" ]; then
:
elif [ -d "$entry" ]; then
if explore "$entry"; then
keep=1 # Keep this directory, it contains kept directories
fi
elif [ -f "$entry" ]; then
if [ -z "$(find "$entry" -atime +999 -print)" ]; then
keep=1 # Keep this directory, it contains a recently-accessed file
fi
fi
done
if ((!keep)); then
echo "$1"
return 1
fi
return 0
}
explore .
Tags shell disk-cleanup osx