Manipulando arquivos ocultos

3

Como posso copiar todos os arquivos / diretórios ocultos no diretório inicial para um diretório separado da linha de comando? Não consegui encontrar muito material sobre o uso de arquivos ocultos.

    
por user43389 25.01.2015 / 21:24

2 respostas

2

O que precisa ser feito

Em princípio, não é uma questão complicada, no entanto, você precisa cuidar de algumas coisas:

  • Você precisa (como eu entendo) copiar arquivos / diretórios ocultos recursivamente
  • Você será executado em confrontos de nomes (nomes duplicados, tentei)

O script (python) abaixo cuida de ambos:

  • Procura arquivos e diretórios recursivamente em determinado diretório (source-)
  • copia arquivos e diretórios encontrados em um determinado diretório (destino)
  • No caso de duplicatas, elas são renomeadas para duplicate_1<filename> , duplicate_2<filename> (ou diretório-) etc.

O script

#!/usr/bin/env python3
import shutil
import sys
import os

directory = sys.argv[1]
target = sys.argv[2]

def handle(name):
    n = 1; name_orig = name
    while os.path.exists(target+"/"+name):
        name = "duplicate_"+str(n)+"_"+name_orig
        n = n+1
    return target+"/"+name

for root, dirs, files in os.walk(directory):
    for name in files:
        if name.startswith("."):
            subject = root+"/"+name
            newfile = handle(name)
            try:
                shutil.copyfile(subject, newfile)
            except:
                pass
    for dr in dirs:
        if dr.startswith("."):
            subject = root+"/"+dr
            newdir = handle(dr)
            try:
                shutil.copytree(subject, newdir)
            except:
                pass

Como usar

Copie o script acima em um arquivo vazio, salve-o como search_hidden.py . Execute-o com os diretórios de origem e de destino como argumentos:

python3 /path/to/search_hidden.py <source_directory> <target_directory>
    
por Jacob Vlijm 25.01.2015 / 22:28
4

Se todos os arquivos ocultos começarem com um ponto (.), você poderá fazer

cp .?* /path/to/directory

do diretório em que os arquivos ocultos estão. Este comando diz copiar todos os arquivos começando com um ponto (.?) Para o diretório especificado. '*' é um curinga.

  • .?* requer pelo menos um caractere após o ponto '.'
por jakekimds 25.01.2015 / 21:47