Eu usaria paste
aqui. É uma ferramenta bacana que pode ser usada para combinar arquivos:
$ paste printdirs.txt archivedirs.txt
/u/lawson/law/print/lawson/tim/1 /u/lawson/law/print/archive
/u/lawson/law/print/dgfinance/monday190/1 /u/lawson/law/print/archive2
Como você pode ver acima, ele imprimirá linhas sucessivas de ambos os arquivos, separadas por tabulações. A separação por tabulação é muito útil se os nomes dos diretórios puderem conter espaços. Agora, você pode iterar sobre a saída paste
para fazer sua coisa:
#!/usr/bin/ksh
printlist="/u/lawson/stage/Scripts/printdirs.txt"
archivelist="/u/lawson/stage/Scripts/archivedirs.txt"
paste "$printlist" "$archivelist" | while IFS=$'\t' read source dest; do
/usr/bin/find "$source" -mtime +14 -type f -exec mv -t "$dest" {} +
done
Note que eu i) removi o cd
, não há necessidade, find
pode ser executado no alvo de qualquer lugar; ii) removeu a sintaxe for i in $(cat foo)
, que geralmente deve ser evitada e iii) substituiu -exec ... \;
por -exec +
, que é mais eficiente (tentará e combinará mv
chamadas, e é por isso que o -t "$dest"
é necessário) .
Se o seu mv
não suportar a opção -t
, altere o comando find
de volta para:
/usr/bin/find "$source" -mtime +14 -type f -exec mv "$source" "$dest" \;