केवल निर्देशिका की सामग्री कैसे निकालें?


14

मैं एक फ़ोल्डर में हूँ /var/myfolder:।

अंदर कुछ अन्य फ़ोल्डर हैं जैसे: /var/myfolder/A/ /var/myfolder/B/ `/var/myfolder/C/आदि।

प्रत्येक के अंदर रैंडम नामों वाली कुछ फाइलें होती हैं। मैं सभी फ़ोल्डर्स के अंदर की सभी फाइलें कैसे निकालूं /var/myfolder?

संरचना (सभी निर्देशिका, उदाहरण के लिए, ए, बी, सी आदि, अंदर /var/myfolder) बरकरार रहना चाहिए।

जवाबों:


17

प्रयत्न:

find /var/myfolder -type f -delete

यह सभी नियमित फ़ाइलों को / var / myfolder के अंतर्गत प्राप्त करता है और केवल निर्देशिकाओं को छोड़कर उन्हें हटा देता है।


समाधान के लिए धन्यवाद। मुझे उल्लेख करना चाहिए कि मैं सोलारिस 9 में ऐसा कर रहा हूं, इसलिए मेरे पास न तो -प्लेट का विकल्प है, लेकिन यह एक अच्छा शुरुआती बिंदु है।
IroeN

2
मैं निम्नलिखित समाधान के साथ आने में सक्षम था: / var / myfolder -type f -exec rm -f {} \;
IroeN

2
माफ़ करना। मैं डेबियन या उबंटू का उपयोग करता हूं। जहाँ तक मुझे पता है, आपका समाधान बराबर है।
StarNamer

6
-type f! =! -type d
मिकसेर्व

7

Zsh के साथ, केवल नियमित फ़ाइलों के मिलान के लिए . ग्लोब क्वालिफायर का उपयोग करें:

rm -- **/*(.)

यह वर्तमान निर्देशिका और इसकी उपनिर्देशिकाओं की सभी (गैर-छिपी) नियमित फाइलों को पुन: हटा देता है। Dछिपी हुई नियमित फ़ाइलों (और छिपी निर्देशिकाओं में नियमित फ़ाइलों) को हटाने के लिए ग्लोब क्वालीफ़ायर जोड़ें ।


मैं बैश का उपयोग कर रहा हूं।
IroeN

1
@ user6554: ... जो न तो आपके प्रश्न और न ही इस्तेमाल किए गए टैग इंगित करता है;)
0xC0000022L


3
find . -depth -exec rm {} + 2>/dev/null

rm निर्देशिकाओं को नहीं हटाता है - इसलिए इसे हर चीज पर चलाएं।

निर्देशिकाओं के प्रति सहानुभूति रखने के लिए:

find .  ! -type d -exec sh -c '
    for f do [ -d  "$f" ] || 
          set "$@" "$f";  shift
    done; rm  "$@"' sh  {} +

और मुझे लगता है कि यह भी काम करना चाहिए, शायद, थोड़ा अनुकूलित तरीका अगर बहुत सारी फाइलें हैं जिन्हें उपरोक्त संस्करण में परीक्षण की आवश्यकता हो सकती है:

find . ! \( -type l -o -type d \)  \
-exec  rm {} + -o -exec  sh -c '
       for f do [ -d "$f" ] ||
       unlink "$f";done' sh {} +

ध्यान दें कि GNU findके लिए एक -xtypeविकल्प है।
स्टीफन चेजलस

@ स्टीफनचेज़ेलस - एस्ट भी करता है। लेकिन मुझे बिल्कुल भी ज़रूरत नहीं थी, मुझे नहीं लगता। मैंने इतने सारे त्रुटि कॉल से बचने के लिए इसे शीर्ष एक में रखा - खामोश किया गया या नहीं - लेकिन यह सिर्फ दूसरों में मूर्खतापूर्ण था।
14

1
# This will delete all directory contents, including hidden files and
# subdirectories, without deleting the directory itself

# With GNU find:
find /path/to/directoryToEmpty -mindepth 1 -delete

# OpenBSD (and probably other BSDs)
find /path/to/directoryToEmpty -mindepth 1 -depth -exec rm -f {} \;

# To see what it deletes, in the order it will delete it:
find /path/to/directoryToEmpty -mindepth 1 -depth -print

0
rm var/myfolder/*/*

सब फ़ोल्डर्स को छुए बिना सब फ़ोल्डर्स के अंदर सब कुछ डिलीट कर देगा।

पहले *के उप निर्देशिकाओं के लिए है myfolderही ( A, B, ...)। दूसरे *में फ़ाइलों के लिए है A, Bआदि

अगर वहाँ अधिक फ़ोल्डर के अंदर हैं A, Bआदि फर्स्ट रन: rm /var/myfolder/*/*/*तो चलाने rm /var/myfolder/*/*


0

आपको प्रश्न में निर्देशिका ट्री के शीर्ष पर cd करने में सक्षम होना चाहिए, फिर रन करें:

find . -type f -print0 | xargs -0 rm -rf

और वह निर्देशिका ट्री बरकरार छोड़ते समय सभी फ़ाइलों को हटा देना चाहिए। -प्रिंट0 और -0 ऑप्शंस को छोड़ा जा सकता है यदि आप आश्वस्त हैं कि आपके पास कोई फ़ाइल या निर्देशिका नाम नहीं है जिसमें रिक्त स्थान हों।

फाइंड कमांड फाइलों (-type f) और लिंक्स (-type l) के बीच अंतर करता है इसलिए इसे लिंक को बरकरार रखना चाहिए, यदि कोई हो। हालांकि परीक्षण नहीं किया गया। यदि संदेह है, तो दौड़ें:

खोजो। -टाइप एल

और यह देखें कि क्या आप पहले वाली कमांड को चलाने से पहले कुछ भी दिखाते हैं।


क्या आप बता सकते हैं कि इसमें rmध्वज कैसे -r, -R, --recursive - remove directories and their contents recursivelyफिट होता है?
स्टीफन राउच

क्योंकि हम rm -rf नहीं चला रहे हैं, हम ढूंढ रहे हैं। -Type f और फिर उस से rm -rf तक आउटपुट को पाइप करना। इसलिए यह केवल फाइलों को हटाता है, यह निर्देशिकाओं को नहीं छूता है। यही है | xargs बिट करता है, यह आउटपुट को बाईं ओर कमांड से लेता है और दाईं ओर कमांड को भेजता है।
rjh427

वही तो मैं कह रहा हूँ। यदि आप किसी भी निर्देशिका को पारित नहीं कर रहे हैं, तो क्या उपयोग एक ध्वज है जो केवल निर्देशिकाओं पर काम करता है?
स्टीफन राउच

क्योंकि मांसपेशियों की स्मृति, और यह अभी भी काम करता है। आप -f "बल" विकल्प पर एक ही आपत्ति उठा सकते हैं, मैं आपको एक ही उत्तर दूंगा।
rjh427

-2

बस कमांड के नीचे उपयोग करें:

sudo rm -rf निर्देशिका_in_which_you_have_content / *

---------------- या --------------------------------- -----------------------

'*' सभी के लिए खड़ा है, जब आप उपयोग करेंगे * जो सभी सामग्री को हटा देगा। तो या तो इस तरह से कमांड का उपयोग करें या उस डायरेक्टरी में जाएं जिसमें आप सभी सामग्री को हटाना चाहते हैं और कमांड के नीचे उपयोग करें:

सुडो rm -rf *

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.