अकस्मात निर्मित निर्देशिका जिसे "~" (टिल्ड) नाम दिया गया है


47

मैं वास्तव में नाम से एक निर्देशिका बनाने में कामयाब रहा ~

(जाहिर है, पायथन os.mkdir('~/something')ऐसा करता है।)

मैं अपने घर से बिना रुके इसे कैसे निकालूं?

इसके अलावा, अगर यह मदद करता है, तो मेरे पास /homeएक अलग विभाजन पर मेरा असली है । और डुप्लिकेट ~( वास्तविक ) में स्थित है ~


51
ऑब्जेगेटरी XKCD । ठीक है, मैं इसे अनिवार्य होने के बारे में झूठ बोल सकता हूं। और एक एक्सकेसीडी है।
जेस्विन जोस

30
अजगर के प्रश्न का उत्तर देने के लिए, जो आपने भविष्य में नहीं पूछा था, का उपयोग करें os.mkdir(os.path.expanduser('~/something'))
मैट नॉर्डहॉफ़

8
... सिर्फ जिज्ञासा के लिए, जब से आपने अजगर में निर्देशिका बनाई, क्या आपने os.rmdir('~/something')इसे हटाने के लिए नहीं सोचा था ?
बाकुरू

@Bakuriu आखिरकार, मैं किया था आंकड़ा है कि बाहर
UniversallyUniqueID

जवाबों:


73

~साथ बच \~या एकल उद्धरण का उपयोग करें '~'। तो तुम कर सकते हो

rmdir ~/\~

या

cd ~ ; rmdir '~'

43
यदि आप किसी ऐसी चीज़ को हटाने के बारे में चिंतित हैं जो आपको नहीं करनी चाहिए, तो आप पहले कुछ गैर-विनाशकारी कर सकते हैं जैसे: mv '~' normalname, फिर निर्देशिका normalname हटा दें।
क्रिस जेफरसन

53
rmdirगैर-विनाशकारी है। rmdirकेवल खाली निर्देशिकाओं को हटा देगा, इसलिए यदि आप rmdirकिसी भी निर्देशिका की कोशिश करते हैं , जिसमें कुछ भी है, तो rmdirउसे हटाने से इंकार कर देंगे।
हाईटेककंप्यूटरजेक

3
आपको इन आदेशों में से पहले में टिल्ड से बचने की भी आवश्यकता नहीं है - ~केवल एक शेल "शब्द" की शुरुआत में विशेष रूप से विस्तारित किया जाता है।
हेनिंग मैखोलम

1
आप भी कर सकते हैं rmdir *। चूंकि यह केवल खाली निर्देशिकाओं को निकालता है, इसलिए आपको कुछ भी विनाशकारी होने के बारे में चिंता करने की आवश्यकता नहीं है।
बेनुबर्ड

@ChrisJefferson: यदि आप पहले अपनी कमांड की जांच करना चाहते हैं, ls -dतो यह देखने के लिए उपयोग करें कि क्या वह उस निर्देशिका या फ़ाइल को सूचीबद्ध करता है जिसे आप चाहते हैं। जैसे प्रभाव वाली किसी चीज की जरूरत नहीं mv
पीटर कॉर्डेस

42

क्या अजगर दे रहा है, अजगर दूर

$ python -c 'import os; os.makedirs("~/foo")'; tree; python -c 'import os; os.removedirs("~/foo")'; tree
.
└── ~
    └── foo

2 directories, 0 files
.

0 directories, 0 files

यदि आपने किया os.mkdir, तो आप इसे os.rmdir(और इसी तरह os.makedirsऔर os.removedirs) के साथ पूर्ववत कर सकते हैं ।


36

आप इस तरह बैकस्लैश का उपयोग करके निर्देशिका नाम से बच सकते हैं (यह मानकर कि आप जिसे हटाना चाहते हैं उसके मूल निर्देशिका में आप काम कर रहे हैं):

rmdir \~

या आप वर्तमान निर्देशिका के रूप में एक डॉट के साथ रिश्तेदार पथ का उपयोग कर सकते हैं (मूल निर्देशिका में स्थित होने पर भी):

rmdir ./~

या आप पूर्ण निरपेक्ष पथ का उपयोग कर सकते हैं:

rmdir /home/USERNAME/~

और कोई चिंता नहीं, rmdirकेवल खाली निर्देशिका को हटा सकते हैं। यदि आप गलती से कमांड और पथ आपके वास्तविक होम डायरेक्टरी का मूल्यांकन करेंगे, तो यह खतरे में नहीं है क्योंकि इसमें फाइलें हैं:

$ rmdir directory_with_files
rmdir: failed to remove ‘directory_with_files’: Directory not empty

मुझे सापेक्ष पथ विकल्प पसंद है। यह मैप करने के लिए असंभव होना चाहिए ./~करने के लिए ~/, की जो निर्देशिका आप अभी हैं परवाह किए बिना। पूर्ण निरपेक्ष पथ के साथ इसी तरह की स्थिति।
MBraedley

2

findआज्ञा ऐसे चमत्कार कर सकती है। आदेश

ls -i

आपको फ़ाइलों या निर्देशिका की इनकोड संख्या देगा। तब आप findऐसी फ़ाइलों या निर्देशिका को हटाने के लिए उपयोग कर सकते हैं :

find . -inum <inode-number> -delete #for a file

तथा

find . -inum <inode-number> -exec rm -rf {}\; #for directories

1

क्या करना चाहिए था

आपको home=os.path.expanduser("~")पहले और फिर प्रदर्शन करना चाहिए था os.path.join(home,"something")~अजगर में पाठ के रूप में व्यवहार किया जाता है और विस्तार नहीं करता है जैसे कि यह में करता है bashया अन्य गोले।

$ python -c 'import os;home=os.path.expanduser("~"); os.mkdir(os.path.join(home,"something"))'                                                                                          

$ ls -ld ~/something
drwxrwxr-x 2 xieerqi xieerqi 4096 7月  12 21:00 /home/xieerqi/something/

मैं इससे छुटकारा कैसे पाऊं

पहले से ही बताए गए तरीकों के अलावा, हम ~वर्णों की एसेसी तालिका से हेक्स मान का उपयोग कर सकते हैं , जो वास्तविक के विपरीत ~कमांड लाइन पर उपयोगकर्ता के होम डायरेक्टरी में विस्तार नहीं करता है (आप जिस स्थिति में सोच रहे हैं, जब शुरुआत में टिल्ड दिखाई देता है एक शब्द, यह उपयोगकर्ता की होम निर्देशिका में फैलता है। तुलना करें ls ~और ls $'\x7e')।

यहां बताया गया है कि यह कैसे काम करेगा:

# Make the directory
$ mkdir ./~                                                                                                                                                                             
$ stat ./$'\x7e'                                                                                                                                                                        
  File: './~'
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: 801h/2049d  Inode: 5768019     Links: 2
Access: (0775/drwxrwxr-x)  Uid: ( 1000/ xieerqi)   Gid: ( 1000/ xieerqi)
Access: 2017-07-12 21:05:31.382828424 -0600
Modify: 2017-07-12 21:05:31.382828424 -0600
Change: 2017-07-12 21:05:31.382828424 -0600
 Birth: -

# and remove it 
$ rmdir ./$'\x7e'                                                                                                                                                                       
$ ls $'\x7e'
ls: cannot access '~': No such file or directory
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.