Mover o subdiretório para o novo diretório pai, onde o novo nome do diretório é incrementado em 1

3

Estou tentando mover um subdiretório de um diretório pai para outro por centenas de instâncias, enquanto altero o nome do subdiretório durante a movimentação. Meus diretórios são um conjunto de números:

1000, 1001, 1002, 1003, ..., 1998, 1999

Cada diretório tem uma subpasta chamada "antiga" (por exemplo, 1000 / antiga), que eu quero mover para o próximo diretório incrementado (e renomear a subpasta).

Por exemplo, quero mover '1000 / antigo' para '1001 / novo'.

Eu tentei usar xargs, algo novo, então não tenho certeza se estou indo na direção certa. Eu acho que o que eu quero é algo como:

find 1* -name 'old' | xargs -i -t mv {} <dir+1>/new

Não tenho certeza de como implementar o incremento (o dir+1 bit).

Eu também tentei implementar uma modificação da resposta aceita para esta questão, mas minha modificação também não está funcionando corretamente (estou usando ls para testar o código antes de realmente começar a mover / renomear diretórios):

#!/bin/bash
for x in 1*; do
  ls -d "$x/old" "${x}$i/new"
  ((++i))
done

O problema acima é que o próximo diretório se torna 10001, 10002, etc, em vez de 1001, 1002.

Qualquer sugestão é muito apreciada.

    
por WillaB 28.03.2015 / 00:30

1 resposta

2

Shells tratam strings representando inteiros em decimais como inteiros. Se você tiver um diretório cujo nome contenha apenas dígitos sem zeros à esquerda, você terá um número e poderá executar aritmética nele.

for d in 1*; do
  mv "$d/old" "$((d+1))/new"
done

Você pode tornar o script mais robusto e realizar a movimentação apenas se o subdiretório old realmente existir e criar o destino, se necessário.

for d in 1*; do
  if [ -d "$d/old" ]; then
    mkdir -p "$((d+1))"
    mv "$d/old" "$((d+1))/new"
  fi
done

find não é útil aqui, pois você não está percorrendo subdiretórios recursivamente.

    
por 28.03.2015 / 00:36