2015-02-03 7 views
6

में आवश्यक होने पर फ़ाइल और mkdir को कैसे स्पर्श करें मुझे एक पूर्ण फ़ाइल नाम जैसे फ़ाइल को स्पर्श करने की आवश्यकता है जैसे: /opt/test/test.txt, लेकिन मुझे यकीन नहीं है कि क्या/opt/परीक्षण प्रणाली पर मौजूद था। तो कोड इस के साथ समान होना चाहिए:एक लाइन

क्या कोड को सरल बनाने का कोई बेहतर तरीका है? मुझे उम्मीद है कि कुछ सिस्टम कमांड हैं जो एक ही नौकरी के साथ एक ही काम कर सकते हैं।

+1

यह कोई वैध perl कोड नहीं है। यह खोल और पर्ल कोड से मिश्रण की तरह दिखता है। – dgw

+0

क्या हम इसके लिए पाइपलाइन का उपयोग नहीं कर सकते? mkdir -p '/ opt/test' | स्पर्श करें '/opt/test/test.txt'? – Jango

+0

@Jango 'touch' अपने मानक इनपुट से कुछ भी नहीं पढ़ता है और 'mkdir' मानक आउट करने के लिए कुछ भी प्रिंट नहीं करता है। तो नहीं, यह 'mkdir -p/opt/test कहने का सिर्फ एक अस्पष्ट तरीका है; स्पर्श/ऑप्ट/परीक्षण/test.txt'। – tripleee

उत्तर

11

perl में, मेरे पसंदीदा मॉड्यूल में से एक का उपयोग करके: Path::Tiny

path("/opt/test/test.txt")->touchpath; 

डॉक से:

mkpath और स्पर्श संयोजित। फ़ाइल को स्पर्श करने से पहले मौजूद नहीं है, तो मूल निर्देशिका बनाता है।

9

एक खोल स्क्रिप्ट, आप बस कर सकते हैं:

mkdir -p /opt/test && touch /opt/test/test.txt 

mkdir -p असफल हो जायेगी नहीं है (और कुछ नहीं करेंगे) यदि निर्देशिका पहले से मौजूद।

perl में, make_pathFile::Path मॉड्यूल से उपयोग करें, फिर फ़ाइल को तब भी बनाएं जब आप चाहें। make_path कुछ भी नहीं करता है यदि निर्देशिका पहले से मौजूद है, इसलिए स्वयं को जांचने की आवश्यकता नहीं है।

4
कमांड लाइन से

पर्ल,

perl -MFile::Basename -MFile::Path=make_path -e' 
    make_path(dirname($_)), open(F, ">>", $_) for pop; 
' /opt/test/test.txt 
2
mkdir B && touch B/myfile.txt 

वैकल्पिक रूप से, एक समारोह बनाने के लिए:

mkfile() { 
    mkdir -p $(dirname "$1") && touch "$1" 
    } 

1 तर्क के साथ यह निष्पादित करें: filepath। कह रहा है:

mkfile B/C/D/myfile.txt 

निर्देशिका बी/सी/डी निर्देशिका में myfile.txt फ़ाइल बनायेगा।

+1

आईएमएचओ, एक तर्क के साथ इसे अच्छी तरह से कॉल करेगा ('mkfile/path/to/filename')। स्क्रिप्ट (या फ़ंक्शन) आंतरिक रूप से 'dirname' को कॉल कर सकती है ... – jm666

+0

@ jm666 जानकारी के लिए धन्यवाद, मैंने अपना जवाब संपादित किया। – Sridhar

0

पायथन को कमांड लाइन पर लाएं।

यानी उपयोग pyp

cat filepaths.txt | pyp "'mkdir -p '+s[0:-1]|s+'; touch '+o" | sh 

Pyed पाइपर ", या pyp, एक लिनक्स कमांड लाइन पाठ हेरफेर awk के समान या sed उपकरण है, लेकिन जो मानक अजगर स्ट्रिंग और सूची के तरीकों के साथ-साथ कस्टम कार्यों का उपयोग करता एक गहन उत्पादन वातावरण में तेजी से परिणाम उत्पन्न करने के लिए विकसित

1

मैं अपने ~/.bash_aliases में एक touchp परिभाषित:।

function touchp() { 
    /bin/mkdir -p "$(dirname "$1")/" && /usr/bin/touch "$1" 
} 

यह उपस्थित होने पर फ़ाइल के ऊपर संरचना को चुपचाप बनाता है, और इसके बिना किसी भी निर्देशिका के एक फ़ाइल फ़ाइल को पारित करने के लिए पूरी तरह से सुरक्षित है।

0

मुझे बहुत कम टाइप करना पसंद है, इसलिए मैंने यह आदेश मेरे नाम पर एक एफएन में रखा है।प्रोफ़ाइल है, लेकिन इससे पहले कि मैं यह किया मैं साल के लिए इस सूत्रीकरण प्रयोग किया है: पिछला आदेश को

mkdir -p dirname/sub/dir && touch $_/filename.ext

चर $_ भंडार अंतिम तर्क। समग्र रूप से जानने के लिए बहुत आसान है।

संबंधित मुद्दे