tl; डॉ
find ./myfolder -mindepth 1 -maxdepth 1 -type d -not -name test2 \
-exec echo rm -rf '{}' \;
फ़ाइलों की सूची से संतुष्ट होने पर प्रतिध्वनि निकालें।
उपयोग करने -mindepth 1
से यह सुनिश्चित होगा कि शीर्ष निर्देशिका का चयन नहीं किया गया है।
$ find ./myfolder -mindepth 1 -type d
./myfolder/test2
./myfolder/test2/one
./myfolder/test2/two
./myfolder/test
./myfolder/test/a1
./myfolder/test/a1/a2
./myfolder/test/a1/a2/a3
लेकिन एक -not -name test2
होगा नहीं उपनिर्देशिका अंदर से बचने test2
:
$ find ./myfolder -mindepth 1 -type d -not -name 'test2'
./myfolder/test2/one
./myfolder/test2/two
./myfolder/test
./myfolder/test/a1
./myfolder/test/a1/a2
./myfolder/test/a1/a2/a3
ऐसा करने के लिए, आपको कुछ कुछ चाहिए जैसे कि prune:
$ find ./myfolder -mindepth 1 -name test2 -prune -o -type d -print
./myfolder/test
./myfolder/test/a1
./myfolder/test/a1/a2
./myfolder/test/a1/a2/a3
लेकिन इसका उपयोग न करें delete
, जैसा depth
कि इसका तात्पर्य है और यह सबसे लंबे रास्ते से मिटना शुरू हो जाएगा:
$ find ./myfolder -depth -mindepth 1 -name test2 -prune -o -type d -print
./myfolder/test/a1/a2/a3
./myfolder/test/a1/a2
./myfolder/test/a1
./myfolder/test
या तो उपयोग करें rm -rf
( echo
यदि आप वास्तव में मिटाना चाहते हैं तो हटा दें ):
$ find ./myfolder -mindepth 1 -name test2 -prune -o -type d -exec echo rm -rf '{}' \;
rm -rf ./myfolder/test
rm -rf ./myfolder/test/a1
rm -rf ./myfolder/test/a1/a2
rm -rf ./myfolder/test/a1/a2/a3
या, यह भी का उपयोग maxdepth
करता है, तो आप सभी की जरूरत निर्देशिका (और सब कुछ अंदर) को हटा (दूर करने के लिए है echo
वास्तव में मिटा करने के लिए):
$ find ./myfolder -mindepth 1 -maxdepth 1 -type d -not -name test2 -exec echo rm -rf '{}' \;
rm -rf ./myfolder/test
-delete
यदि निर्देशिका खाली नहीं है, तब भी A विफल रहेगा:
$ find ./myfolder -mindepth 1 -maxdepth 1 -type d -not -name test2 -delete
find: cannot delete ‘./myfolder/test’: Directory not empty