Mova alguns arquivos em cada diretório para um diretório diferente [duplicado]

1

Sou bastante novo no Linux e especialmente no shell e em todos os seus comandos. Meu objetivo é mover alguns arquivos em todos os diretórios para outro diretório. Para ser mais claro, eu tenho isso:

/DIR  
- /dir1  
  - file1  
  - file2  
  - ...  
- /dir2  
  - file1  
  - file2  
  - ...  
- ...  
- /dirn  
  - file1  
  - file2  
  - ... 

O que eu preciso é mover todo o arquivo1 e arquivo2 para um novo diretório em seu próprio diretório, para que eu tenha algo assim:

/DIR  
- /dir1
  - /mydir
      - file1  
      - file2  
  - ...  
- /dir2
  - /mydir
      - file1  
      - file2  
  - ...  

Para o bem da questão, devo dizer que os nomes das pastas não são como "dir1", "dir2" e assim por diante, mas são nomes arbitrários. Os arquivos, no entanto, são sempre nomeados da mesma forma (models.py e wrappers.py). Obrigado pela sua ajuda.
P.S .: Eu realmente apreciaria se você pudesse me explicar suas respostas, a fim de aprender um pouco mais sobre o Linux e não apenas copiar e colar o código.

    
por cronos2 21.08.2012 / 23:48

1 resposta

2
cd DIR 
for dir in $(find . -maxdepth 1 -mindepth 1 -type d -printf "%f\n" )
do
    cd $dir
    mkdir -p mydir
    mv *.py mydir
    cd ..
done

cd no diretório de nível superior. O comando find encontrará todos os arquivos que correspondem aos critérios fornecidos e os imprime. Maxdepth e mindepth limitam a pesquisa aos arquivos diretamente sob o DIR, e o tipo limita a lista de resultados aos diretórios. Use um loop for para iterar sobre cada um dos diretórios retornados pelo comando find. cd em cada um, crie o subdiretório mydir, mova os arquivos para dentro dele e, em seguida, faça cd back up para DIR para que a próxima iteração possa processar o próximo diretório.

Se você tiver outros diretórios sob DIR que não contenham * .py, você poderá ignorá-los inserindo uma instrução if logo acima da linha cd $ dir:

if [ "$dir" = "skip" -o "$dir" = "whatever" ]; then continue; fi
    
por 22.08.2012 / 00:37

Tags