Neden bazı GNU Coreutils komutlarının -T/--no-target-directory
seçeneği var? .
Geleneksel bir Unix dizin hiyerarşisinde (öz nokta) anlamını kullanarak yapabileceği her şey gibi görünüyor .
Düşünen:
cp -rT /this/source dir
-T
Seçenek oluşturmasını kopyasını önler dir/source
alt dizin. Aksine /this/source
ile tanımlanır dir
ve içeriği ağaçların arasında buna göre eşlenir. Yani örneğin /this/source/foo.c
gider dir/foo.c
ve benzeri ziyade için dir/source/foo.c
.
Ancak bu, aşağıdaki -T
seçeneklerin kullanımı olmadan kolayca yapılabilir:
cp -r /this/source/. dir # Probably worked fine since dawn of Unix?
Anlamsal olarak, izleyen nokta bileşeni bir çocuk olarak kopyalanır dir
, ama elbette "çocuk" zaten var (yani yaratılması gerekmiyor) ve aslında dir
kendisidir, bu nedenle etkisi /this/path
ile tanımlanır dir
.
Geçerli dizin hedef ise, iyi çalışıyor:
cp -r /this/tree/node/. . # node's children go to current dir
Orada bir şey Yapabileceğiniz mı sadece ile -T
varlığını rasyonalize ki? (Nokta dizini uygulamayan işletim sistemlerine desteğin yanı sıra, belgelerde belirtilmeyen bir gerekçedir.)
Yukarıdaki nokta numarası, GNU Info dokümantasyonunda belirtilen yarış koşullarını çözmüyor -T
mu?
.
Hile yapar sadece aynı zamanda onun basename yeniden adlandırma değilken, bir dosyayı kopyalarken işi!cp /path/to/file /target/dir/.
Varsa/target/dir/file
ve bir dizinse aynı teşhisi alırsınız! Ancak-T
bunun bir adımda, yarış koşulları olmadan yapamayacağının ne olduğunu gösterdin : bir dosyayı kopyala ve adını bir alt dizine yönlendirilmeden değiştir.