Mengapa beberapa perintah GNU Coreutils memiliki -T/--no-target-directoryopsi? Sepertinya semua yang dilakukannya dapat dicapai dengan menggunakan semantik .(titik diri) dalam hierarki direktori Unix tradisional.
Mengingat:
cp -rT /this/source dir
The -Tpilihan mencegah salinan dari menciptakan dir/sourcesubdirektori. Sebaliknya /this/sourcediidentifikasi dengan dirdan isinya dipetakan di antara pohon sesuai. Jadi misalnya /this/source/foo.cpergi ke dir/foo.cdan seterusnya, bukan ke dir/source/foo.c.
Tetapi ini dapat dengan mudah dilakukan tanpa -Topsi menggunakan:
cp -r /this/source/. dir # Probably worked fine since dawn of Unix?
Secara semantik, komponen titik jejak disalin sebagai anak dir, tetapi tentu saja "anak" itu sudah ada (jadi tidak harus dibuat) dan sebenarnya diritu sendiri, sehingga efeknya adalah yang /this/pathdiidentifikasi dir.
Ini berfungsi dengan baik jika direktori saat ini adalah target:
cp -r /this/tree/node/. . # node's children go to current dir
Apakah ada sesuatu yang dapat Anda lakukan hanya dengan -Titu dapat merasionalisasi keberadaannya? (Selain dukungan untuk sistem operasi yang tidak mengimplementasikan direktori dot, alasannya tidak disebutkan dalam dokumentasi.)
Apakah dot trick di atas tidak menyelesaikan kondisi balapan yang sama dengan yang disebutkan dalam dokumentasi Info GNU -T?
.trick melakukan pekerjaan saat menyalin file, hanya saja tidak ketika mengubah nama basename nya pada saat yang sama!cp /path/to/file /target/dir/.Jika/target/dir/fileada dan merupakan direktori, Anda mendapatkan diagnostik yang sama! Tetapi Anda telah menunjukkan apa-Tyang tidak dapat dilakukan tanpanya dalam satu langkah, tanpa syarat balapan: salin file dan ubah namanya tanpa disuntikkan ke subdirektori.