cp -L vs. cp -H


44

Sorun

cp -HVeya ile dosyaları kopyalarken cp -Laynı sonuçları alıyorum:

$ ls -l fileA
  fileA -> fileB
$ cp fileA somewhere/ -H
$ ls -l somewhere/
  fileA     # fileA is a copy of fileB, only renamed, with same properties!

Bu cevap , her iki seçeneği de birlikte kullanılan UNLESS olarak açıklar -R. Benim için değil. Sabitlenmiş dosyalar, kaynak olarak gösterdikleri dosyaların kopyaları olarak yeniden adlandırıldıkça soft.
 

Soru :

Doğru kullanımı nedir cp -Hve cp -L? Beklenen davranış bu mu?


  Çözmek için girişimim : man cpiki seçenek için oldukça aynı söyler, ama info cp'ın ifadeler daha da benim için kafa karıştırıcı hale getirir. Belki birileri bunu biraz çözmeme yardım edebilir:

-H Bir komut satırı argümanı sembolik bir bağ belirtirse, sembolik bağın yerine işaret ettiği dosyayı kopyalayın . Bununla birlikte, özyinelemeli geçiş yoluyla karşılaşılan sembolik bağın (doğasını koruyarak) kopyalayın .

Bu bana bir çelişki gibi geliyor: Sanırım “ sembolik bir bağın doğası « bir yerlere işaret ediyor…

-L, --dereference Onlardan fotokopi çekerken sembolik bağlantıları izleyin. Bu seçenek ile cpsembolik bir bağlantı oluşturamazsınız. Örneğin, kaynak ağacındaki bir sembolik bağlantı (normal dosyaya), hedef ağacındaki normal bir dosyaya kopyalanacaktır.

Bir bağlantının normal bir dosya olmadığını biliyorum, ama… İtiraf ediyorum, buradaki açıklama ile fazla uğraşıyorum.


Çalıştır info cp, ara -R. Diyor ki, Copy directories recursively. fakat dizin olmayanlar ile test yapıyorsunuz. Aradaki fark, kopyaladığınız dizinlerin içinde olanlar, komut satırı argümanları değil.
Mikel

@Mikel Dizinlerin içeriğini kopyalamak ve dizinin içeriğini kendileri ile kopyalamakla aynı sonuçları aldım. Ayrıca: uzunca bir süre önünde oturdum info cpve bu seçenekle ilgili kelime seçiminin gerçekte ne anlama geldiğini anlamak için çok çalıştım . ve bu ilanla ilgili. info cp
Gönderide

Yanıtlar:


54

Sembolik bağlantılar ile, araçların yapabilecekleri iki şey vardır:

  1. Sembolik linke sembolik link olarak davran ("doğasını koruyarak") veya
  2. İşaret bağlantısını, gösterdiği dosya türü olarak kabul edin.

Bunun -H“doğasını koruduğunu” söylemek bir çelişki değildir. Alternatif düşünün. Eğer kullanırsanız -L, sembolik bağlar cpbulur açılacak ve içerikleri hedef dosya adına kopyalandı. Bu yüzden kaynak bir sembolik linkti, fakat kopyası bir sembolik link değil. Böylece "bir sembolik olarak doğasını kaybetti".

Düşünmek

$ mkdir subdir
$ echo "some contents" > subdir/file
$ ln -s file subdir/link

# definition of "list", the abbreviated ls -l output used below
$ list() { ls -l "$@" | \
    awk '$0 !~ /^total/ { printf "%s %s\t%s %s %s\n", $1, $5, $9, $10, $11 }' ; }

$ list subdir
-rw-rw-r-- 14   file  
lrwxrwxrwx 4    link -> file

$ cp -rH subdir subdir-with-H
$ list subdir-with-H
-rw-rw-r-- 14   file  
lrwxrwxrwx 4    link -> file

$ cp -rL subdir subdir-with-L
$ list subdir-with-L
-rw-rw-r-- 14   file  
-rw-rw-r-- 14   link  

Harika cevap - Seçeneklerin ne yaptığını gösterme biçiminizi seviyorum. Oldukça cevap vermez benim kardeş dizinlere sembolik kopyalama hakkında soru, ama bunu öğrenmek için hızlı bir deney yapabiliriz nasıl bariz hale getirdik. 😉
Michael Scheper,

1
Ah, gerçekten bilmek istediğim şey şuydu: superuser.com/a/138594/219388
Michael Scheper

19

Davranış -Lve davranış arasındaki fark da -Hne zaman -rbelirtilir. cpile alt dizinlerde sembolik bağlantılar oluşturmayacak, -L -rancak kullanacaksanız olacaktır -H -r.


cp: -H, -L ve -P seçenekleri -r seçeneğiyle belirtilmemiş olabilir.
3z33etm
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.