Alguém poderia, por favor, fornecer o código para fazer o seguinte: Assumir que existe um directório de ficheiros, todos os quais têm de ser executados através de um programa. O programa produz os resultados de forma padronizada. Preciso de um script que vá para uma directoria, execute o comando em cada ficheiro, e concatne a saída num grande ficheiro de saída.
Por exemplo, para executar o comando em 1 ficheiro:
$ cmd [option] [filename] > results.out
O seguinte código de bash passará $file para comando onde $file representará cada ficheiro em /dir
for file in /dir/*
do
cmd [option] "$file" >> results.out
done
Exemplo
el@defiant ~/foo $ touch foo.txt bar.txt baz.txt
el@defiant ~/foo $ for i in *.txt; do echo "hello $i"; done
hello bar.txt
hello baz.txt
hello foo.txt
Que tal isto?
find /some/directory -maxdepth 1 -type f -exec cmd option {} \; > results.out
-type -f
especifica que apenas ficheiros simples serão processados.-exec cmd {}
diz-lhe para executar cmd
com a opção especificada opção
para cada ficheiro encontrado, com o nome do ficheiro substituido por {}
.cmd
é redireccionada para
results.out
No entanto, se se preocupa com a ordem em que os ficheiros são processados, você poderia ser melhor escrever um laço. Penso que "encontrar" processa os ficheiros em ordem inode (embora eu possa estar errado sobre isso), que pode não ser o que que deseja.
Com base na abordagem @Jim Lewis's:
Aqui está uma solução rápida utilizando find
e também ordenando os ficheiros pela sua data de modificação:
$ find directory/ -maxdepth 1 -type f -print0 | \
xargs -r0 stat -c "%y %n" | \
sort | cut -d' ' -f4- | \
xargs -d "\n" -I{} cmd -op1 {}
Para a classificação, ver:
http://www.commandlinefu.com/commands/view/5720/find-files-and-list-them-sorted-by-modification-time