कुछ GNU Coreutils कमांड का -T/--no-target-directory
विकल्प क्यों है? ऐसा लगता है कि यह सब कुछ है कि यह .
एक पारंपरिक यूनिक्स निर्देशिका पदानुक्रम में (स्वयं डॉट) के शब्दार्थों का उपयोग करके प्राप्त किया जा सकता है ।
मानते हुए:
cp -rT /this/source dir
-T
विकल्प के लिए एक बनाने से रोकता है प्रतिलिपि dir/source
उपनिर्देशिका। बल्कि इससे /this/source
पहचाना जाता है dir
और पेड़ों के बीच सामग्री की मैपिंग की जाती है। इसलिए उदाहरण के /this/source/foo.c
लिए dir/foo.c
और इतने पर जाता है , बजाय dir/source/foo.c
।
लेकिन इसका -T
उपयोग किए बिना विकल्प को आसानी से पूरा किया जा सकता है :
cp -r /this/source/. dir # Probably worked fine since dawn of Unix?
शब्दार्थ, अनुगामी डॉट घटक को एक बच्चे के रूप में कॉपी किया जाता है dir
, लेकिन निश्चित रूप से कि "बच्चा" पहले से ही मौजूद है (इसलिए इसका निर्माण नहीं होना चाहिए) और वास्तव में dir
स्वयं है, इसलिए इस प्रभाव /this/path
की पहचान की जाती है dir
।
यदि वर्तमान निर्देशिका लक्ष्य है तो यह ठीक काम करती है:
cp -r /this/tree/node/. . # node's children go to current dir
क्या ऐसा कुछ है जो आप केवल उसी के साथ -T
कर सकते हैं जो इसके अस्तित्व को तर्कसंगत बना सकता है? (ऑपरेटिंग सिस्टम के लिए समर्थन के अलावा जो डॉट डायरेक्टरी को लागू नहीं करते हैं, प्रलेखन में उल्लेखित तर्क नहीं है।)
क्या उपरोक्त डॉट ट्रिक उन्हीं रेस स्थितियों को हल नहीं करती है, जो GNU इंफो डॉक्यूमेंटेशन में उल्लिखित हैं -T
?
.
चाल करता है जब किसी फ़ाइल को कॉपी, बस एक ही समय में अपने basename नहीं का नाम बदलने जब काम!cp /path/to/file /target/dir/.
यदि/target/dir/file
मौजूद है और एक निर्देशिका है, तो आप एक ही निदान प्राप्त करते हैं! लेकिन आपने दिखाया-T
है कि एक कदम में इसके बिना क्या किया जा सकता है, बिना दौड़ की स्थिति के: एक फ़ाइल की प्रतिलिपि बनाएँ और उसका नाम बदले बिना इसे एक उपनिर्देशिका में हिलाया जा सकता है।