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>