Dosyaları yeniden adlandırarak kopyala


28

Çok büyük bir dosya ağacım var. Bazı dosyalar aynı ada sahip ancak farklı durumlarda örneğin, some_code.cve Some_Code.c.

Bu yüzden bir NTFS / FAT dosya sistemine kopyalamaya çalışırken, bana dosyayı değiştirmek mi yoksa atlamak mı istediğimi soruyor.

Bu dosyaları otomatik olarak yeniden adlandırmanın herhangi bir yolu var mı, örneğin,  (1)çakışma dosyasının adına ekleyerek (Windows 7'nin yaptığı gibi)?


Meraklı. Sadece görmek istedim, NTFS bölümünde aynı adı taşıyan bir dosya (HPFS / NTFS'ye göre sudo fdisk -l /dev/sda) oluşturmaya çalışırsam ne tür bir hata alıp touch foo; touch Foo2 dosya foove ile bitirdim Foo. Ama Windows'a yeniden başlamak, orada nasıl göründüklerine bakmak için meraklı değilim. Migth sadece bir FAT sorunu mu? Ah - FAT'lı bir USB-Stick'im var ve bir dosya içinde bir FAT sistemi yaratabilir, ... - bir dakika lütfen. :)
kullanıcı bilinmeyen

Yanıtlar:


41

Birçok GNU gibi araçlar cp, mvve tarhedef var olduğunda yedek dosyaları oluşturma desteği. Yani kopyalarken, olduğu fooiçin barzaten adlı bir dosya varsa, bar, varolan bar yeniden adlandırılır ve kopya sonra bariçeriğini içerecektir foo. Varsayılan olarak, baryeniden adlandırılmıştır bar~, ancak davranış değiştirilebilir:

                                # If a file foo exists in the target, then…
cp -r --backup source target    #   rename foo → foo~
cp -r --backup=t source target  #   rename foo → foo.~1~ (or foo.~2~, etc)

Numaralandırılmış yedeklemeler oluşturmak gibi yalnızca bir tane daha var olduğunda başka değişkenler de vardır. Daha fazla ayrıntı için coreutils kılavuzuna bakın.


1
Parlak. Bu seçeneğin var olduğunu bilmiyordum ve bu sadece son derece yararlı oldu. @ Gilles'e teşekkürler.
Steve Hill

2
OSX cp - yedekleme bayrağı içermiyor. kullanın brew install coreutilsve sonra komutu gcpkullanın.
Weston Ganger,

6

denedim

apropos copy | grep "(1)" 

olası adayları bulmak için mcopy ortaya çıktı.

man mcopy 

umut verici bir seçenek gösteriyor -D clash-optionki bu hoş değil mi? Ama çok güzel değil - tarif edilmedi. Ancak, sistemimde, başarı olmadan ve google üzerinden başarı ile aradığım mtools.dvi ile ilgili bazı ipuçları var, ancak daha sonra google ile doğrudan bu siteyi aradım mcopy clash-optionve buldum .

Kısa bir test yaptım

mcopy -D A f* a 

otomatik ad ve targetdir için yapılan testler için a- otomatik adlandırma yerine her dosyanın benden yoksayması veya geçersiz kılmamı istedi, o aptal s ....

Sürümüm mtools-4.0.10ve yardım sayfam 1996 - 15 yaşları arasında. Bu arada gerçekten bazı özelliklerini mi kaybetmeliyiz?

Çalışmayı iki adıma bölerdim:

  • Bir dosya için benzersiz bir ad üreten kısa bir işlev yapın; bu isim doluysa.
  • Çalıştırın findve kopyalamak istediğiniz her dosya için bu komut dosyasını yürütün.

Bu yaklaşıma yardım edelim mi? :)

Dosyaları otomatik olarak adlandırmak için bir komut dosyası:

#!/bin/bash

name=$1
target=$2

autorename () {
name=$1
target=$2
no=$3 

test -e ${target}/${name}.$no && autorename ${name} ${target} $((no+1)) || cp ${name} ${target}/${name}.$no 

}

test -e ${target}/${name} && autorename ${name} ${target} 0 || cp ${name} ${target} 

ve bu benim test çağrım:

find -maxdepth 1 -name "fo*" -type f -exec ./autorename.sh {} /mnt/hidden/test/a ";"

Not: -maxdepth, -name ve -type etkilenen dosyaların sayısını önemli ölçüde sınırlamak için kullanılır. Komut dosyasını daha derin dosya yapıları veya dosya adlarındaki boşluklar ve satır beslemesi, sayfa beslemesi vb. Gibi korkak karakterler için test etmedim.

.1 kullandım çünkü çoğu komutta sorun çıkarmazken, (ve a) çoğu zaman maskeleme gerekir.



0

cpEn azından GNU ile değil .

Yinelenen dosya adlarına sahip olmamanız önemle tavsiye edilir (görmezden gelinme davası), bunlar size sadece bir acı dünyasına neden olur. Kullanarak bu tür kopyaların bir listesini bulun

find . | tr A-Z a-z | sort | uniq -d

Ardından çıktı varsa her satır için dosyalardan birini manuel olarak yeniden adlandırın. Gelecekte kopya oluşturmaktan kaçının.


Adam bu karışıklığı yaratan kişi olduğunu asla ima etmedi.
tshepang

Evet, doğru, ama sonuçlarına
katlanan

Biraz farklı zamanlardan gelen yedeklerle bittiğim bir durum var. Onları birleştirmek, ancak farklı sürümleri gizlemek istemiyorum. Mesela, bildiğim kadarıyla, eskisi daha iyi olabilir. Sadece incelemeden sonra söyleyebilirim. Bu arada, yedeklemeleri kopyalayıp yeniden adlandırmanız gerekir.
abalter,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.