यह क्या करने का इरादा है?
ls
वर्तमान निर्देशिका में फ़ाइलों को सूचीबद्ध करता है
$(ls)
स्थान है ls
कि तर्क के रूप में उत्पादन के विकल्पrm
- अनिवार्य
rm $(ls)
रूप से वर्तमान निर्देशिका में सभी फ़ाइलों को हटाने का इरादा है
इस तस्वीर में क्या ग़लती है ?
ls
फ़ाइल नाम में विशेष वर्णों को ठीक से संभाल नहीं सकते। यूनिक्स उपयोगकर्ता आमतौर पर विभिन्न तरीकों का उपयोग करने की सलाह देते हैं । मैंने यह भी दिखाया है कि फाइलनामों की गिनती के बारे में एक संबंधित प्रश्न में । उदाहरण के लिए:
$ touch file$'\n'name
$ ls
file?name
$ rm $(ls)
rm: cannot remove 'file': No such file or directory
rm: cannot remove 'name': No such file or directory
$
इसके अलावा, जैसा कि डेनिस के उत्तर में ठीक से उल्लेख किया गया है, प्रमुख डैश के साथ एक फ़ाइलनाम, rm
प्रतिस्थापन के बाद तर्क के रूप में व्याख्या की जा सकती है , जो फ़ाइल नाम को हटाने के उद्देश्य को पराजित करता है।
क्या काम करता है
आप वर्तमान निर्देशिका में फ़ाइलों को हटाना चाहते हैं। तो ग्लोब का उपयोग करें rm *
:
$ ls
file?name
$ rm $(ls)
rm: cannot remove 'file': No such file or directory
rm: cannot remove 'name': No such file or directory
$ rm *
$ ls
$
आप find
कमांड का उपयोग कर सकते हैं । इस उपकरण को अक्सर केवल वर्तमान निर्देशिका से अधिक के लिए अनुशंसित किया जाता है - यह पूरी निर्देशिका ट्री को पुन: प्राप्त कर सकता है, और फ़ाइलों के माध्यम से संचालित कर सकता है-exec . . .{} \;
$ touch "file name"
$ find . -maxdepth 1 -mindepth 1
./file name
$ find . -maxdepth 1 -mindepth 1 -exec rm {} \;
$ ls
$
पायथन में फ़ाइल नाम के विशेष पात्रों के साथ कोई समस्या नहीं है, इसलिए हम इसे नियोजित कर सकते हैं (ध्यान दें कि यह एक केवल फ़ाइलों के लिए है, आपको इसका उपयोग करने की आवश्यकता होगी os.rmdir()
और os.path.isdir()
यदि आप निर्देशिकाओं पर काम करना चाहते हैं):
python -c 'import os; [ os.remove(i) for i in os.listdir(".") if os.path.isfile(i) ]'
वास्तव में, ऊपर दिए गए आदेश ~/.bashrc
को संक्षिप्तता के लिए फ़ंक्शन या उपनाम में बदल दिया जा सकता है । उदाहरण के लिए,
rm_stuff()
{
# Clears all files in the current working directory
python -c 'import os; [ os.remove(i) for i in os.listdir(".") if os.path.isfile(i) ]'
}
उस का पर्ल संस्करण होगा
perl -e 'use Cwd;my $d=cwd();opendir(DIR,$d); while ( my $f = readdir(DIR)){ unlink $f;}; closedir(DIR)'