Seu caminho
Você pode certamente fazer o que quiser, mas provavelmente é perigoso, pois alguns arquivos podem ter espaços em seus nomes. Aqui está uma maneira de fazer isso.
$ tar -zcvf DB-Backup-17082012.tgz $(ls -lrth|grep "Aug 17"|awk '{print $9}')
Isso eliminará todos os dados da coluna que você está obtendo do ls -lrth
e apenas fornecerá os nomes dos arquivos.
Usando o Localizar & tar: método # 1
Você pode usar o comando Unix find
para obter uma lista de todos os arquivos que foram modificados pela última vez em uma determinada data e canalizar essa lista para tar
da seguinte forma:
$ find . -type f -newermt 2012-08-17 ! -newermt 2012-08-18 -print0 | \
xargs -0 tar zcvf DB-Backup-17082012.tgz
Os itens acima só encontrarão arquivos que foram modificados pela última vez em 2012-08-17, mas nada de mais recente. O -print0
informa para dividir os arquivos que ele gera usando caracteres nulos (
) e o xargs -0
tar
pega cada um desses arquivos e cria invocações de tar
adicionando os arquivos em lotes de cada vez.
Esta é provavelmente a maneira menos eficiente de fazer isso.
OBSERVAÇÃO: Esse método também corre o risco de perder arquivos se você tiver mais que argumentos de linha de comando para o comando -print0
.
Usando o Localizar & tar: método # 2
O xargs -0
e o find
são redundantes e você pode usar apenas tar
para gerar a lista e chamar {} \+
diretamente:
$ find . -type f -newermt 2012-08-17 ! -newermt 2012-08-18 \
-exec tar zcvf DB-Backup-17082012.tgz {} \+
Os argumentos {}
para encontrar acima farão duas coisas. O find
substituirá o nome de cada arquivo, pois tar
o encontrará nessa posição ao chamar \+
e find
informar tar
a continuar colocando quantos arquivos puder na linha de comando antes de chamar% código%. Isso evita que você invoque tar
100 vezes se tiver 100 arquivos para adicionar a ele.