Neden bazı GNU Coreutils komutlarının -T/--no-target-directoryseç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
-TSeçenek oluşturmasını kopyasını önler dir/sourcealt dizin. Aksine /this/sourceile tanımlanır dirve içeriği ağaçların arasında buna göre eşlenir. Yani örneğin /this/source/foo.cgider dir/foo.cve benzeri ziyade için dir/source/foo.c.
Ancak bu, aşağıdaki -Tseç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 dirkendisidir, bu nedenle etkisi /this/pathile 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 -Tvarlığı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 -Tmu?
.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/fileve bir dizinse aynı teşhisi alırsınız! Ancak-Tbunun 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.