Cristiano Amaral perguntou:
Estou com o seguinte panorama, tenho um diretório com arquivos
de 2007 e 2008, preciso mover todos os arquivos de 2008 para
outro diretório, estou tentando usar o find + o xargs, mas
ainda não está 100%. Alguém tem alguma dica?
Eu raramente faço essas coisas de uma "tacada" só. Normalmente,
eu procedo em várias etapas. Na 1a, eu gero um arquivo auxiliar,
com o conteúdo do diretório que eu quero analisar. Na 2a,
"grepo" a informação desejada. Na 3a, construo o script para
fazer a operação. Finalmente, rodo o script.
Neste caso:
1a etapa:
find . -type f -printf "Ano:%TY %p\n" > temp1.txt
find . -type f : pega apenas arquivos (ignora diretórios)
-printf "Ano:%TY %p\n" : escreve ano e nome do arquivo
2a etapa:
grep "^Ano:2008" temp1.txt | sed s/Ano:2008 // - > temp2.txt
grep "^Ano:2008" : pega apenas as linhas que começam com Ano:2008
sed s/Ano:2008 // - : substitui Ano:2008 por nada, de forma
que temp2.txt tem apenas os nomes dos arquivos (espero que você
não seja maluco, e não tenha um arquivo com ":" no filename!)
3a etapa:
for x in `cat temp2.txt`; do echo "mv -vi $x /dest/dir/" >> temp3.txt;
done
for x in `cat temp2.txt`: faz x valer cada arquivo com data >= 2008
echo "mv -vi $x /dest/dir/" >> temp3.txt : escreve em temp3.txt a
operação
de mover o arquivo, tomando cuidado de mostrar o que faz (-v) e perguntar
se destino já existe (-i)
4a etapa:
analisar o script e rodar:
sh temp3.txt
Alberto Monteiro