Mover diretórios específicos de certa profundidade

1

Eu tentei criar um script bash que me ajudará a mover subpastas específicas da minha pasta.
O problema é, na pasta principal photos eu tenho pastas com o seguinte nome: 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 e dentro delas as pastas com o nome exato são repetidas e então novamente a mesma estrutura de pastas se repete. As subpastas que desejo mover estão na última pasta com um caractere no nome. As subpastas que desejo mover têm 2 ou mais caracteres em seu nome. A estrutura da pasta é 0-9 / 0-9 / 0-9 / subdir A pasta de destino não está especificada, então, digamos que seja desktop/photos1 .

Exemplo: photos/0/0/0/23345 photos/1/9/0/12578

Se dois subdiretórios tiverem o mesmo nome, por exemplo, photos/0/0/0/23345 e photos/1/1/1/23345 Gostaria de renomear um deles. Eu estou no OSX

    
por OneStyle07 17.03.2016 / 15:11

1 resposta

1
  • Em sistemas com GNU coreutils (portanto, não é uma instalação padrão do OSX), você pode usar

    mv -f --backup=numbered -t /path/to/target photos/*/*/*/*/

    Isso moverá todos os subdiretórios na profundidade 4 em photos/ , quaisquer que sejam os nomes dos diretórios nas profundidades 1, 2 e 3.

    A vantagem desse método: a renomeação ocorrerá somente conforme necessário (se você tiver apenas uma subpasta 12578 , por exemplo, em photos/1/9/0/ , ela não será renomeada).

  • Sem o GNU coreutils, você pode usar este script (um pouco complicado), que renomeará todas as subpastas. Por exemplo. photos/1/9/0/12578 será renomeado 12578-190 :

    target=/some/path for i in {0..9}; do for j in {0..9}; do for k in {0..9}; do for dir in "photos/$i/$j/$k/*/"; do mv -- "$dir" "$target/$(basename $dir)-$i$j$k" done done done done

por 17.03.2016 / 17:11

Tags