localize arquivos com atributos específicos, renomeie-os para o nome do diretório, copie-os em outro lugar

1

Não vai parecer, mas passei mais de 3 horas tentando descobrir isso ... Eu estou tentando identificar arquivos em todos os subdiretórios de um diretório pai com atributos específicos (nome e tamanho), em seguida, renomeie os arquivos para seu nome de subdiretório e copiá-los para o diretório pai. Minha tentativa mais próxima (eu acho) foi:

find /data/data2/parent/ -size 25166176c -name "o*.nii" -exec cp {} $subdir/o*.nii $subdir.nii \;

Para isso, eu recebo duas linhas de: "cp: target '/data/data2/parent/3145_V2.nii' não é um diretório" Eu verifiquei se existe apenas um arquivo que atenda aos dois atributos, e existe. Também digno de nota, existem dois subdiretórios sob "pai /" com um arquivo relevante que deve ser escolhido pelo comando find mas ele apenas imprimiu o erro referente a um dos dois, "parent / 3145_v2" (e pareceu ignorar o outro subdiretório ).

    
por focusbob 27.08.2018 / 17:44

1 resposta

0

Eu tenho uma regra que eu gostaria de seguir - se eu gastar mais de 30 minutos trabalhando na construção de um único comando no bash, eu mudo para o python 3.

Esse problema pode ser facilmente resolvido em python:

#/usr/local/bin/python3

import os, re

DIR_TO_SEARCH = os.getcwd()   #change this to what you want

for (dirpath, dirnames, filenames) in os.walk(DIR_TO_SEARCH):
    if dirpath == DIR_TO_SEARCH:
        # you said you just want subdirectories, so skip this
        continue
    else:
        for name in filenames:
            full_path = dirpath + '/' + name
            #check for the attributes you're looking for. Change this to your needs.
            if re.search(r'o*\.nii', name) or os.path.getsize(full_path) > 0:
                #rename the file to its directory's name, and move it to the parent dir
                print('Moving {} to {}'.format(full_path, dirpath + '.nii'))
                os.rename(full_path, dirpath + '.nii')  

Em geral, o Python pode ser menos plug-and-play do que ferramentas bash, mas tem a vantagem de ser muito bem documentado e livre de erros. Apenas meus dois centavos.

Sinta-se livre para usar o script acima, eu testei e funciona bem. Felicidades:)

    
por 28.10.2018 / 05:10

Tags