আপনার এক্সটেনশনের দীর্ঘ তালিকা থাকলে - এই পৃষ্ঠার অন্যান্য সমাধানগুলি আকাঙ্ক্ষিত নয় - এর দীর্ঘ ক্রম বজায় রাখা -not -name 'this' -not -name 'that' -not -name 'other'
ক্লান্তিকর এবং ত্রুটি-ঝুঁকির কারণ হতে পারে - বা যদি অনুসন্ধান প্রোগ্রামিয়াত হয় এবং এক্সটেনশনের তালিকা রানটাইমের সময় নির্মিত হয়।
এই পরিস্থিতিতেগুলির জন্য, এমন কোনও সমাধান যা ডেটা (এক্সটেনশনের তালিকা) এবং কোডকে আরও স্পষ্ট করে আলাদা করে দেয় (প্যারামিটারগুলি find
) হতে পারে। এমন একটি ডিরেক্টরি এবং ফাইল কাঠামো দেওয়া হয়েছে যা এর মতো দেখাচ্ছে:
.
└── a
├── 1.txt
├── 15.xml
├── 8.dll
├── b
│ ├── 16.xml
│ ├── 2.txt
│ ├── 9.dll
│ └── c
│ ├── 10.dll
│ ├── 17.xml
│ └── 3.txt
├── d
│ ├── 11.dll
│ ├── 18.xml
│ ├── 4.txt
│ └── e
│ ├── 12.dll
│ ├── 19.xml
│ └── 5.txt
└── f
├── 13.dll
├── 20.xml
├── 6.txt
└── g
├── 14.dll
├── 21.xml
└── 7.txt
আপনি এর মতো কিছু করতে পারেন:
## data section, list undesired extensions here
declare -a _BADEXT=(xml dll)
## code section, this never changes
BADEXT="$( IFS="|" ; echo "${_BADEXT[*]}" | sed 's/|/\\|/g' )"
find . -type f ! -regex ".*\.\($BADEXT\)"
যার ফলাফল:
./a/1.txt
./a/b/2.txt
./a/b/c/3.txt
./a/d/4.txt
./a/d/e/5.txt
./a/f/6.txt
./a/f/g/7.txt
কোড ব্লক পরিবর্তন না করে আপনি এক্সটেনশানগুলির তালিকা পরিবর্তন করতে পারেন।
বিঃদ্রঃ নেটিভ ওএসএক্সের সাথে কাজ করে না find
- পরিবর্তে gnu সন্ধান করুন।
-not
দ্বারা প্রতিস্থাপন করা যেতে পারে'!'
(উদ্ধৃতি প্রস্তাবিত)। অন্যদিকে,-name
কেস সংবেদনশীল তবে-iname
কেস সংবেদনশীল।