Procura por arquivos que correspondam a outro nome de arquivo em outra pasta

2

Eu tenho alguns arquivos em uma pasta, que são denominados ***_code_c**** (onde * representa qualquer letra ou número). Eu tenho outra pasta que tem muitos arquivos, pastas e subpastas dentro dela. O que quero fazer é procurar e copiar para outro local quaisquer arquivos que correspondam aos nomes desses arquivos, como ***_code_c**** , mas com apenas duas letras diferentes, como ***_mode_m**** e ***_kode_c**** e qualquer um dos arquivos correspondentes a esse Os critérios serão copiados para pastas específicas em que as que tiverem o mode em vez de code serão colocadas em uma pasta e as que tiverem kode em vez de code serão colocadas em outra pasta. Se alguém puder, por favor, informe como isso pode ser feito. Obrigado

Exemplo para esclarecer o que precisa ser feito:

FolderA tem alguns arquivos, digamos ABC_code_c001 , CDE_code_c002 , FGH_code_c003 ...

Outro FolderB tem muitos arquivos, pastas e subpastas dentro dele.

para todos os arquivos em FolderA há dois arquivos correspondentes em FolderB , que são nomeados exatamente da mesma maneira, exceto na parte intermediária. Por exemplo, os dois arquivos correspondentes de ABC_code_c001 são ABC_kode_c001 e ABC_mode_m001 , enquanto os correspondentes os arquivos de FGH_code_c003 serão FGH_kode_c003 e FGH_mode_m003 e assim por diante

Então, o que eu quero fazer é pegar todos os arquivos em FolderA e pesquisar os dois arquivos correspondentes em FolderB ; em seguida, copiar cada um desses dois arquivos em outras duas pastas, digamos FolderC e FolderD (um em cada).

Observe que os nomes que estou usando não são os nomes exatos que listei no exemplo, mas tem a mesma ideia de onde a diferença entre o nome e os outros dois nomes será uma letra no meio de c para k e m .

    
por Tak 28.09.2014 / 20:48

3 respostas

1

Digamos que você esteja em seu $ HOME e tenha quatro diretórios - folderA e folderB, como em sua pergunta; folderK, onde você deseja mover os arquivos 'kode' para; e folderM, onde você deseja mover suas pastas 'mode' para. O seguinte deve conseguir isso:

shopt -s globstar
cd /path/to/folderA
for f in *_code_c*; do
  mv /path/to/folderB/**/"${f/code/kode}" /path/to/folderK
  mv /path/to/folderB/**/"${f/code_c/mode_m}" /path/to/folderM
done

Obviamente, teste primeiro em alguns dados fictícios.

    
por evilsoup 28.09.2014 / 23:09
1

Crie um arquivo simples copyFile.sh da seguinte forma:

#!/bin/bash
kodeFile=$(basename  | sed -e 's/_code_c/_kode_c/')
modeFile=$(basename  | sed -e 's/_code_c/_mode_m/')
find FolderB -name "$modeFile" -exec cp {} FolderC/$modeFile \;
find FolderB -name "$kodeFile" -exec cp {} folderD/$kodeFile \;

salve-o, por exemplo, em / home / yourUser / bin.

Altere a permissão para copyFile.sh :

chmod +x /home/yourUser/bin/copyFile.sh

Abra o arquivo /home/yourUser/.bashrc e adicione no final desta linha:

PATH=$PATH:/home/yourUser/bin

salve e recarregue:

source .bashrc

Agora você tem um novo utilitário que pesquisa o arquivo e copia-o.

Tente isto:

find FolderA -name "*_code_c*" -exec copyFile.sh {} \;

Testado no lubuntu 12.04

    
por Lety 29.09.2014 / 01:26
1

Eu acredito que isso é exatamente o que você descreve.

O script abaixo parece um pouco detalhado, mas uma grande parte dele é tomada pelas informações necessárias que o usuário deve fornecer nessa construção um pouco complicada.

Como usar

Como sempre, copie o script abaixo, insira os caminhos apropriados, neste caso, alguns, as sequências de identificação apropriadas e salve-o como reorg.py .

Execute-o pelo comando:

python3 /path/to/reorg.py

O script

#!/usr/bin/env python3

import os
import shutil

# --------------------------------------------------------
# existing files directories
original_dir = "/path/to/original_files"
equals_dir = "/path/to/files_with_name_variants"
# original identifying string
id_string = "code" 
# variants + their desired destination
var_1 = "node"; vardir_1 = "/path/to/directory/where_first_variants_shouldbestored"
var_2 = "kode"; vardir_2 = "/path/to/directory/where_second_variants_shouldbestored"

# ---------------------------------------------------------

origs = []

for root, dirs, files in os.walk(original_dir):
    for name in files:
        if id_string in name:
            origs.append(name.replace(id_string, ""))

for root, dirs, files in os.walk(equals_dir):
    for name in files:
        if var_1 in name:
            if name.replace(var_1, "") in origs:
                shutil.copyfile(root+"/"+name, vardir_1+"/"+name)
        if var_2 in name:
            if name.replace(var_2, "") in origs:
                shutil.copyfile(root+"/"+name, vardir_2+"/"+name)
    
por Jacob Vlijm 29.09.2014 / 14:52