यूनिक्स / लिनक्स के साथ खोज करते समय छिपी हुई फ़ाइलों को बाहर निकालें?


35

findछिपी हुई फ़ाइलों को बाहर करने के लिए मुझे किन विकल्पों का उपयोग करने की आवश्यकता है ?


4
एक तरफ: इस कार्य के लिए कुछ विशेष समर्थन नहीं होने का कारण यह है कि केवल एक अग्रणी नाम वाली फ़ाइलों के बारे में विशेष बात है। lsजब तक कि विशेष रूप से अनुरोध नहीं किया जाता है, तब तक वे सूचीबद्ध नहीं होते हैं: वे हर मामले में पूरी तरह से सामान्य फाइलें हैं, बस यह lsआपको डिफ़ॉल्ट रूप से अनदेखा करने देता है।
dmckee

2
सवाल: क्या आप कुछ छुपाना चाहते हैं .hidden/visible.txt?
कीथ थॉम्पसन

जवाबों:


14

मुझे यह यहाँ मिला :

find . \( ! -regex '.*/\..*' \) -type f -name "whatever"

सिर्फ क्यों नहीं \( ! -name '.*' \)?
grawity

@ मुझे लगता है कि मैं पूरी तरह से नहीं जानता कि यह कैसे काम करता है। क्या आप न केवल छिपी हुई फाइलें, बल्कि छिपी हुई निर्देशिकाओं और उनकी सभी उप-सामग्री और सबफ़ोल्डरों में छिपी हुई फ़ाइलों को छिपा सकते हैं?
जर्विन

5
नहीं, यह नहीं होगा: / लेकिन \( ! -path '*/.*' \)होगा।
विशाल

@grawity Ya, मुझे लगता है कि मैंने इस बारे में एक धारणा बनाई थी कि ओपी क्या चाहता है ... आपका -नाम समाधान संभवतः सबसे निकटतम है जो वे पूछ रहे थे।
जर्विन

@ विशालता और दान: क्या यह (! -पथ '^। *') नहीं है ?? आपके समाधान किसी भी फ़ाइल को अनदेखा कर देंगे, जिसमें '।' कहीं भी a.exe, b.out आदि जैसे फ़ाइल नाम में ....
सॉफ्टवेयर मैकेनिक

13

ऐसा लगता है कि नकारात्मक ग्लोब पैटर्न अच्छी तरह से ज्ञात नहीं है। तो आप उपयोग कर सकते हैं:

find . -name "[!.]*"

12

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

find . -type f | grep -v '/\.'

अपने दृष्टिकोण के समान लेकिन शायद थोड़ा सरल है।


यह केवल एक ही लाइनर था जिसने मेरे लिए काम किया।
entpnerd

7

निम्नलिखित findउपयोग का प्रयास करें :

find . -type f -not -path '*/\.*'

जो सभी छिपी हुई फ़ाइलों (फ़ाइलों और निर्देशिकाओं को डॉट के साथ शुरू करने) को अनदेखा करेगा।


1

मैंने एक स्क्रिप्ट लिखी थी, findnhजिसके बारे में मेरा मानना ​​है कि इस सवाल के जवाब से बेहतर कुछ बढ़त के मामले हैं, जिन्हें मैं वेब पर पा सकता हूं।

#!/bin/bash

declare -a paths

while [ $# -ne 0 ]; do
  case "$1" in -*) break ;; esac
  paths+=("$1")
  shift
done

find "${paths[@]}" \( -name . -o -name .. -o \! \( -name '.*' -prune \) \) "$@"

उदाहरण के लिए, आप एक स्पष्ट रूप से निर्दिष्ट छिपी निर्देशिका के अंदर गैर-छिपी हुई फ़ाइलों और निर्देशिकाओं को पा सकते हैं findnh ~/.hiddendir/, जैसे कि कमांड , जो दिखाएगा ~/.hiddendir/fileलेकिन नहीं ~/.hiddendir/.superhiddenfile


1
कोडिंग का अच्छा सा हिस्सा। सिवाय, जब मैं कोशिश करता हूं, तो मुझे findnh ~/.hiddendir/कुछ नहीं मिलता है। इसके अलावा, यह कैसे ! -path '*/.*'और से अलग है find … | grep -v '/\.'?
जी-मैन का कहना है कि 'मोनिका'

1

यदि आप करना चाहते हैं findऔर grep, ripgrepडिफ़ॉल्ट रूप से छिपी हुई फ़ाइलों को बाहर करता है, जैसे

rg --files

--files प्रत्येक फ़ाइल को प्रिंट करें जिसे वास्तव में खोज किए बिना खोजा जाएगा।


1

fd

उपयोग करें fd, एक सरल, बहुत तेज और उपयोगकर्ता के अनुकूल विकल्प find। डिफ़ॉल्ट रूप से, यह:

  • डिफ़ॉल्ट रूप से छिपी निर्देशिका और फ़ाइलों को अनदेखा करता है।
  • .gitignoreडिफ़ॉल्ट रूप से , अपने पैटर्न को अनदेखा करता है ।

बेंचमार्क विश्लेषण की जाँच करें ।


1

छिपी हुई फ़ाइलों को खोजने के लिए:

find -name '[.]*'

दृश्यमान फ़ाइलों को खोजने के लिए:

find -name '[!.]*'

यह इतना आसान है।

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