Posso recriar scripts de arquivos como seus inodes / mtimes aumentar em ordem de nome de arquivo? Através de subdiretórios?

0

Para encurtar a história, eu tenho um Makefile com bugs que está faltando algumas definições de pré-requisitos e, consequentemente, acidentalmente depende da "ordem" dos arquivos no disco (verificados em um repositório SVN) como determinado pelo seu número de inode. p>

Este pedido parece ter mudado após uma migração do servidor SVN (e, é claro, este pedido não é algo em que alguém confiaria deliberadamente). Mas o resultado é que minhas compilações estão quebradas, porque o destino que costumava ser construído primeiro (e a compilação do pré-requisito) agora é construído depois de outros destinos (que estão faltando erroneamente esse pré-requisito).

Eu posso consertar o Makefile, mas como uma solução alternativa para reconstruir versões mais antigas do software (que ainda contêm o bug Makefile), eu gostaria de um comando ou script pequeno para:

  • recriar arquivos e diretórios na ordem crescente de nome de arquivo
  • recursivamente em subdiretórios
  • , então o resultado final é que os inodes aumentam à medida que os nomes de arquivos aumentam

Isso é possível?

Bash ideal, mas Python é aceitável.

* Eu realmente não sei que Make está visitando arquivos no inode number, mas definitivamente não está fazendo isso em ordem alfabética de nome de arquivo. Pode ser hora de modificação, mas se for assim, a questão é a mesma. Se o pedido for completamente aleatório, a questão é discutível. (Eu aprecio que é provável que seja especificado como sendo arbitrário, mas corra com ele).

    
por Lightness Races in Orbit 02.05.2018 / 14:37

1 resposta

0

Dê a esse script uma lista de nomes de arquivos na ordem em que você deseja que seus tempos de modificação sejam definidos. Eles serão colocados em ordem crescente, separados por 1 segundo.

#!/bin/sh
# touch++: run touch to set mod time of file arguments,
# starting at indicated time and increasing by 1 second
# for each argument
# mp, 5/2/2018
usage() {
    echo "Usage: $0 -d \"date\" FILE ..." >&2
}

while getopts "d:" opt
do
    case "$opt" in
        d)
            date="$OPTARG"
            ;;
        *)
            usage
            exit 1
            ;;
    esac
done
shift $((OPTIND-1))

if [ -z "$date" ]
then
    usage
    exit 1
fi
secs=$(date -d "$date" "+%s")
if [ $? != 0 ]
then
    usage
    exit 2
fi
echo setting times starting at $secs $(date -d "@$secs")
for f
do
    touch -m -t $(date -d "@$secs" "+%Y%m%d%H%M.%S") -- "$f"
    secs=$((secs + 1))
done
    
por 02.05.2018 / 17:50