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 -0tar 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.