2011-01-31 23 views
21

dosyasını dst hedefine kopyalamak istiyorum, ancak src sembolik bir bağ olduğunda, dosyanın içeriğini kopyalamak yerine bağlantıyı koruyun. Kopyalama gerçekleştirildikten sonra os.readlink, src ve dst için de aynı değeri döndürmelidir.Python'da sembolik bir bağ kopyalanıyor

modül shutiliçindekilerin dosyanın kopyalar ve bağlantıyı korumak olmaz böyle copyfile, copy ve copy2, ancak bunların hepsi gibi çeşitli işlevlere sahiptir. shutil.move, özgün dosyayı kaldırdığı gerçeğinden başka doğru davranışa sahiptir.

Symlinks korurken dosya kopyalamak için Python'da yerleşik bir yol var mı?

cevap

38

Sadece

def copy(src, dst): 
    if os.path.islink(src): 
     linkto = os.readlink(src) 
     os.symlink(linkto, dst) 
    else: 
     shutil.copy(src,dst) 

shutil.copytree benzer bir şey yapar, ama senderle belirtildiği gibi, sadece dizinleri değil tek dosyalar kopyalama hakkında seçicidir.

+1

Bunu yapmak için 'copytree 'kullanmayı denedim ve bir OSError' src'nin bir dizin olmadığı konusunda şikayet ettim; Ben 'os.path.islink' gerçekten kontrol tek yolu olduğunu düşünüyorum. – senderle

+1

Dosyaları kopyalamaktan ziyade, bağları koruyan dosyaları kopyalamaya (copytree gibi dizinler yerine) özel bir işlevin bulunmadığı garip, ama ben de bulamadım. Tek yol bu gibi görünüyor ... –

İlgili konular