Tüm yinelenen dosyaları sabit bağlantılarla nasıl değiştirebilirim?


20

Çeşitli dosyalar içeren iki klasörüm var. İlk klasördeki bazı dosyaların ikinci klasörde tam bir kopyası vardır. Bunları sabit bir bağlantıyla değiştirmek istiyorum. Bunu nasıl yapabilirim?


2
Lütfen işletim sistemi ve dosya sistemi sağlayın.
Steven

Eh, ubuntu 15.04 üzerinde ext4 kullanıyorum, ancak birisi başka bir işletim sistemi için bir cevap sağlarsa, bu soruyu okuyan biri için yararlı olabileceğinden eminim.
qdii

Yanıtlar:


20

Linux için 4 komut satırı çözümü biliyorum. Tercih ettiğim, rdfindmevcut tüm seçenekler nedeniyle burada listelenen sonuncusudur .

fdupes

  • Bu en çok tavsiye edilen / en çok tanınan olanı gibi görünüyor.
  • Kullanımı en basit olanıdır, ancak tek eylemi kopyaları silmek.
  • Yinelenenlerin aslında yinelenen olduğundan emin olmak için (sonsuza kadar çalıştırılmadan), dosyalar arasındaki karşılaştırmalar önce dosya boyutuna, sonra md5 karmasına, ardından by-by-byte byte karşılaştırmasına göre yapılır.

Örnek çıktı ("gösteri boyutu", "özyinelemeli" seçenekleriyle):

$ fdupes -Sr .
17 bytes each:                          
./Dir1/Some File
./Dir2/SomeFile

hardlink

  • Adından da anlaşılacağı gibi, bulunan dosyaları sabit bağlantılarla değiştirin.
  • Bir --dry-runseçeneği var.
  • İçeriklerin nasıl karşılaştırıldığını göstermez, ancak diğer tüm seçeneklerin aksine dosya modunu, sahibi ve değiştirilen zamanı dikkate alır.

Örnek çıktı (iki dosyamın biraz farklı değiştirilmiş süreleri olduğunu unutmayın, bu nedenle ikinci çalışmada bunu görmezden gelmesini söyledim):

$ stat Dir*/* | grep Modify
Modify: 2015-09-06 23:51:38.784637949 -0500
Modify: 2015-09-06 23:51:47.488638188 -0500

$ hardlink --dry-run -v .
Mode:     dry-run
Files:    5
Linked:   0 files
Compared: 0 files
Saved:    0 bytes
Duration: 0.00 seconds

$ hardlink --dry-run -v -t .
[DryRun] Linking ./Dir2/SomeFile to ./Dir1/Some File (-17 bytes)
Mode:     dry-run
Files:    5
Linked:   1 files
Compared: 1 files
Saved:    17 bytes
Duration: 0.00 seconds

puding

  • Kullanıcının daha sonra üzerinde çalıştığı dosyaları bulmak için yapılmıştır; hiçbir eylemi yok.
  • Karşılaştırmalar dosya boyutuna ve ardından sha1 karmasına göre yapılır.
    • Karma, sha256, sha384 veya sha512 olarak değiştirilebilir.
    • Karma, bayt bayt karşılaştırması yapmak için devre dışı bırakılabilir

Örnek çıktı ("özyinelemeli" seçeneği ile):

$ duff -r .
2 files in cluster 1 (17 bytes, digest 34e744e5268c613316756c679143890df3675cbb)
./Dir2/SomeFile
./Dir1/Some File

rdfind

  • Seçeneklerin alışılmadık bir sözdizimi vardır (taklit etmek findmi gerekiyor ?).
  • Eylemlerin yinelenen dosyaları alması için çeşitli seçenekler (silme, sembolik bağlantılar oluşturma, bağlantı oluşturma).
  • Kuru çalışma moduna sahiptir.
  • Karşılaştırmalar dosya boyutu, sonra ilk bayt, sonra son bayt, sonra md5 (varsayılan) veya sha1 ile yapılır.
  • Bulunan dosyaların sıralanması, hangi dosyanın orijinal olarak kabul edildiğini öngörülebilir kılar.

Örnek çıktı:

$ rdfind -dryrun true -makehardlinks true .
(DRYRUN MODE) Now scanning ".", found 5 files.
(DRYRUN MODE) Now have 5 files in total.
(DRYRUN MODE) Removed 0 files due to nonunique device and inode.
(DRYRUN MODE) Now removing files with zero size from list...removed 0 files
(DRYRUN MODE) Total size is 13341 bytes or 13 kib
(DRYRUN MODE) Now sorting on size:removed 3 files due to unique sizes from list.2 files left.
(DRYRUN MODE) Now eliminating candidates based on first bytes:removed 0 files from list.2 files left.
(DRYRUN MODE) Now eliminating candidates based on last bytes:removed 0 files from list.2 files left.
(DRYRUN MODE) Now eliminating candidates based on md5 checksum:removed 0 files from list.2 files left.
(DRYRUN MODE) It seems like you have 2 files that are not unique
(DRYRUN MODE) Totally, 17 b can be reduced.
(DRYRUN MODE) Now making results file results.txt
(DRYRUN MODE) Now making hard links.
hardlink ./Dir1/Some File to ./Dir2/SomeFile
Making 1 links.

$ cat results.txt 
# Automatically generated
# duptype id depth size device inode priority name
DUPTYPE_FIRST_OCCURRENCE 1 1 17 2055 24916405 1 ./Dir2/SomeFile
DUPTYPE_WITHIN_SAME_TREE -1 1 17 2055 24916406 1 ./Dir1/Some File
# end of file

1
"md5 (varsayılan) veya sha1." Bu, dosyaların aynı olduğu anlamına gelmez. Bir karma hesaplamak, programın tüm dosyayı zaten okumasını gerektirdiğinden, sadece bayt-bayt dosyalarının tamamını karşılaştırmalıdır. CPU zamanından da tasarruf sağlar.
endolith

@endolith Bu yüzden ne olacağını görmek için her zaman kuru çalışmaya başlarsınız ...
Izkata

1
Ancak yazılımın amacı sizin için çift dosyaları tanımlamaktır. Dosyaların gerçekten çoğaltılmış olup olmadığını manuel olarak iki kez kontrol etmeniz gerekiyorsa, bu iyi değildir.
endolit


2
Aynı boyutta, ilk bayt ve bitiş baytlı n dosyanız varsa , ancak hepsi farklıysa, doğrudan karşılaştırmayla n'nin gerektirdiğini belirlemek ! çift ​​karşılaştırmaları. Onları karma yapmak, daha sonra karma dosyaları karşılaştırmak, özellikle büyük dosyalar ve / veya çok sayıda dosya için çok daha hızlı olacaktır. Bu filtreyi geçen herhangi biri, doğrulamak için doğrudan karşılaştırmalar yapabilir. (Veya sadece başlamak için daha iyi bir karma kullanın.)
Alan De Smet

6

Yinelenen Komutan , Windows'ta olası bir çözümdür:

Duplicate Commander PC'nizde yinelenen dosyaları bulmanızı ve yönetmenizi sağlayan ücretsiz bir uygulamadır. Kopya Komutanı, disk alanınızı bu kopyalardan kurtarmanıza izin veren birçok özellik ve araçla birlikte gelir.

Özellikler:

Replacing files with hard links
Replacing files with soft links
... (and many more) ...

1

Linux için burada bir Bash betiği bulabilirsiniz .


2

Duplicate & Same File Searcher , Windows'ta başka bir çözümdür:

Duplicate & Same Files Searcher (Duplicate Searcher) aynı dosyaya yinelenen dosyaları (klonlar) ve NTFS sabit bağlantılarını aramak için bir uygulamadır. Dosya adından bağımsız olarak yinelenen dosya içeriğini arar (gerçek bayt-bayt karşılaştırması kullanılır). Bu uygulama sadece yinelenen dosyaları silmek veya başka bir konuma taşımak için değil, aynı zamanda yinelenen NTFS sabit bağlantıları ile değiştirmek için izin verir (benzersiz!)

resim açıklamasını buraya girin


1

Bilgisayarımda Link Shell Extension adlı şık bir aracım vardı; Sadece Sabit Bağlantılar ve Sembolik Bağlantılar oluşturmak için değil, Kavşaklar da harikaydı! Buna ek olarak, kurulumdan önce var olanlar bile farklı bağlantı türlerini kolayca tanımlamanıza izin veren özel simgeler ekledi; Örneğin Kırmızı Oklar Sert Bağlantıları, Yeşil Sembolik Bağlantıları temsil eder ... ve zincirler Kavşakları temsil eder.

Ne yazık ki yazılımı bir süre önce kaldırdım (çeşitli programların toplu olarak kaldırılmasında), bu yüzden artık bağlantıları manuel olarak oluşturamıyorum, ancak Windows bir Sabit, Sembolik veya Bağlantı bağlantısı algıladığında simgeler hala otomatik olarak görünüyor.


1

Jdupes tavsiye ederim . Geliştirilmiş bir fdupes çatalıdır , ancak şunları içerir:

  • bir dizi yeni komut satırı seçeneği - dahil --linkhardveya -Lkısaca
  • tüm büyük işletim sistemi platformları için yerel destek
  • hızın ortalama olarak fdup'lardan 7 kat daha hızlı olduğu söyleniyor

Sorunuz için, sadece yürütebilirsiniz $ jdupes -L /path/to/your/files.

Proje hala aktif geliştirme aşamasında olduğundan GitHub deposundan en son kaynağı klonlamak ve oluşturmak isteyebilirsiniz . Windows ikili dosyaları da burada sağlanır. Paketlenmiş ikili dosyalar bazı Linux / BSD dağıtımlarında mevcuttur - aslında ilk olarak buldum $ apt search.

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.