Existe um comando que listará todos os arquivos que modifiquei este ano?

4

Eu quero listar todos os arquivos que eu modifiquei este ano e incluí-los. Alguém sabe se existe um comando para listá-los? Obrigado antecipadamente.

    
por Peacemaker5 22.11.2016 / 18:54

4 respostas

17

Se você quiser encontrar arquivos, o comando find é uma ferramenta poderosa. Você pode procurar em um diretório e imprimir os caminhos de todos os arquivos que correspondem a alguns testes:

# find all files in /some/directory whose name starts with 'project_b'
find /some/directory -iname 'project_b*'

# find all files in /some/directory which are owned by user 'joe'
find /some/directory -user joe

# find all files in /some/directory whose name starts with 'project_b'
# but which are *not* owned by user 'joe'
find /some/directory -iname 'project_b*' -and -not -user joe

Para obter a data da última modificação de um arquivo (ou, mais precisamente, a última modificação do conteúdo de um arquivo), é possível verificar o timestamp mtime. find tem um teste para mtime:

# find all files, whose mtime is less than 365 days back
find /some/directory -mtime -365

Isso até agora fornece uma lista de todos os arquivos que você deseja fazer backup. Agora para o backup em si. find traz uma opção chamada -exec que aplica um comando a todos os arquivos encontrados:

find /some/directory -iname '*.txt' -exec cp {} /somewhere/else \;

Se o comando find encontrar test.txt , other.txt e something.txt , a parte -exec será executada:

cp test.txt /somewhere/else
cp other.txt /somehwere/else
cp something.txt /somewhere/else

Como você provavelmente pode ver, o {} é substituído pelo arquivo em questão.

EDIT: Você provavelmente precisará encontrar uma solução melhor do que apenas cp para o próprio backup, porque cp iria copiar todos os arquivos para /somewhere/else sem manter a estrutura de diretório.

No geral, um programa de backup dedicado pode ser uma opção melhor.

    
por Henning Kockerbeck 22.11.2016 / 19:12
5

Supondo que você deseja manter a data restrita ao ano atual, você pode usar -newermt com a data.

Isso procurará no diretório atual por qualquer arquivo depois de 1º de novembro de 2016 e copiá-lo para / target, mantendo a estrutura de diretório.

find . -newermt "2016-11-01 00:00:00" -exec cp --parents {} /target \;

O --parents adicionado ao comando cp permite que você copie os arquivos que mantêm as pastas nas quais ele existe.

Por exemplo ...

ubuntu@ubuntu-xenial:~$ ls
percona-release_0.1-4.xenial_all.deb  t  t2  testdir  testfile2.vm  testfile.vm
ubuntu@ubuntu-xenial:~$ cp --parents t/output.txt testdir/
ubuntu@ubuntu-xenial:~$ ls testdir/
directory2  t

Quando copiei t/output.txt para testdir/ , criei a pasta t em testdir/ e copiei o arquivo.

    
por bc2946088 22.11.2016 / 19:23
2

Para listar todos os arquivos modificados este ano, juntamente com seus detalhes:

find / -mtime -365 -ls

Isso listará tudo, desde os últimos 365 dias.

Para mostrar apenas arquivos regulares, adicione -type f ao comando acima.

Para obter uma lista de todos os arquivos modificados (com caminho completo):

find / -mtime -365

Você pode fazer o backup desses arquivos em qualquer lugar usando cp ou scp etc.

Adicione -printf "%f\n" ao final do comando para imprimir apenas nomes de arquivos.

    
por Ani Menon 22.11.2016 / 19:15
1

Eu uso alguns aliases

alias last-24-hours='sudo find * -ctime -1 -type f'
alias last-week='sudo find * -ctime -7 -type f'

e você pode criar um alias

alias last-year='sudo find * -ctime -365 -type f'

mas provavelmente produzirá uma lista muito longa.

-o -

Se você quiser uma visão geral gráfica, você pode usar o baobab , para ver onde há muitos dados (e onde você poderia 'limpar a casa' antes do backup).

-o -

Uma alternativa é usar uma ferramenta, que pode fazer um backup incremental, por exemplo rsync . Ele encontrará automaticamente o que precisa ser adicionado ou substituído no backup.

    
por sudodus 22.11.2016 / 19:31