Como excluo pastas e arquivos com mais de 7 dias na linha de comando?

4

Eu quero excluir pastas e seus arquivos foram criados por mais de 7 dias usando a linha de comando.

    
por Mahmoud AL-saadi 11.12.2011 / 06:07

2 respostas

12

* NIX

Se você estiver usando * nix e tiver encontrar disponível, isso deve ser feito:

find /the/directory/containing/files/to/delete -mtime +7 -exec rm -r {} \;

O sinalizador -mtime é para verificar o registro de data e hora da modificação dos arquivos encontrados. Se estiver acima de 7*24h ago,
ele executará rm /path/to/file

Na página de manual de find

-mtime n  
    File's  data was last modified n*24 hours ago.  See the comments  
    for -atime to understand how rounding affects the interpretation  
    of file modification times.  

WINDOWS XP & VISTA

Eu nunca trabalho nas janelas, mas fiquei curioso para ver qual comando seria o equivalente ao acima em um ambiente MS-DOS. Eu encontrei Arquivo em lote para excluir arquivos com mais de N dias aqui no stackoverflow.

O comando relevante (cópia + colado do encadeamento ligado anteriormente):

forfiles -p "C:\what\ever" -s -m *.* -d <number of days> -c "cmd /c del @path"

WINDOWS 7

A sintaxe mudou um pouco, portanto, o comando atualizado é

forfiles -p "C:\what\ever" -s -m *.* /D -<number of days> /C "cmd /c del @path"
    
por 11.12.2011 / 06:17
0

Se você precisar lidar com problemas de limite de espaço em uma árvore de arquivos muito grande (no meu caso, muitos ramos forçosos), que às vezes enquanto estiver executando o processo de localizar e excluir -

Aqui está um script que eu programo diariamente para encontrar todos os diretórios com um arquivo específico ("ChangesLog.txt"), e, em seguida, Classificar todos os diretórios encontrados que são mais antigos que 2 dias e Remover o primeiro diretório correspondente (cada agendamento pode ter uma nova correspondência):

bash -c "echo @echo Creating Cleanup_Branch.cmd on %COMPUTERNAME% - %~dp0 > Cleanup_Branch.cmd"
bash -c "echo -n 'bash -c \"find ' >> Cleanup_Branch.cmd"
rm -f dirToDelete.txt
rem cd. > dirToDelete.txt 
bash -c "find .. -maxdepth 9 -regex ".+ChangesLog.txt" -exec echo {} >> dirToDelete.txt \; & pid=$!; sleep 100; kill $pid "
sed -e 's/\(.*\)\/.*//' -e 's/^./"&/;s/.$/&" /' dirToDelete.txt | tr '\n' ' ' >> Cleanup_Branch.cmd
bash -c "echo -n '-maxdepth 0 -type d -mtime +2 | xargs -r ls -trd | head -n1 | xargs -t rm -Rf' >> Cleanup_Branch.cmd"
bash -c 'echo -n \" >> Cleanup_Branch.cmd'
call Cleanup_Branch.cmd

Observe os requisitos:

  1. Excluindo apenas os diretórios com "ChangesLog.txt", pois outros diretórios antigos não devem ser excluídos.
  2. Chamando os comandos do sistema operacional em cygwin diretamente , caso contrário, ele usou os comandos padrão do Windows.
  3. Coletando os diretórios para excluir em um arquivo de texto externo, para salvar os resultados , pois às vezes o processo de localização foi interrompido.
  4. Definindo um tempo limite para o processo de localização usando & processo de fundo que está sendo morto após 100 segundos .
  5. Classificando os diretórios mais antigos primeiro, para a prioridade de exclusão.
por 08.07.2013 / 15:30