স্বেচ্ছাসেবী ফাইলের নাম (নিউলাইন অক্ষরগুলি সহ এটি সহ) ডিল করতে, সাধারণ কৌশলটি এর.//. পরিবর্তে ফাইলগুলি ভিতরে সন্ধান করা .। কারণ //সাধারণত যখন ডিরেক্টরি ট্রি ঢোঁড়ন ঘটবে না পারে, আপনি নিশ্চিত যে একটি //সংকেত একটি নতুন ফাইলের নাম শুরু find(অথবা এখানে lsattr -R) আউটপুট।
lsattr -R .//. | awk '
function process() {
i = index(record, " ")
if (i && index(substr(record,1,i), "i"))
print substr(record, i+4)
}
{
if (/\/\//) {
process()
record=$0
} else {
record = record "\n" $0
}
}
END{process()}'
দ্রষ্টব্য যে আউটপুটটি এখনও নতুন লাইন পৃথক থাকবে। আপনার যদি এটি পোস্ট-প্রক্রিয়া করার প্রয়োজন হয়, আপনাকে এটি মানিয়ে নিতে হবে। উদাহরণস্বরূপ, আপনি -v ORS='\0'এটি জিএনইউতে ফিড করতে সক্ষম হতে একটি যুক্ত করতে পারেন xargs -r0।
আরও মনে রাখবেন যে lsattr -R(কমপক্ষে 1.42.13) ফাইলের পতাকা PATH_MAX (সাধারণত 4096) এর চেয়ে বড় যার পতাকাগুলি রিপোর্ট করতে পারে না , তাই কেউ লুকিয়ে রাখতে পারে তার অভিভাবক ডিরেক্টরিটি (বা পথের উপাদানগুলির দিকে নিয়ে যাওয়ার যে কোনও পথ উপাদানকে সরিয়ে নিয়ে এমন অপরিবর্তনীয় ফাইলটি এটি নিজেকে অপরিবর্তনীয় হিসাবে বাদে) একটি খুব গভীর ডিরেক্টরিতে পরিণত করে।
চারপাশের কাজগুলি এর findসাথে ব্যবহার করা হবে -execdir:
find . -execdir sh -c '
a=$(lsattr -d "$1") &&
case ${a%% *} in
(*i*) ;;
(*) false
esac' sh {} \; -print0
এখন, -print0এটি পোস্ট-প্রসেসেবল, তবে আপনি যদি সেই পাথগুলির সাথে কিছু করার ইচ্ছা করেন তবে মনে রাখবেন যে PATH_MAX এর চেয়ে বড় ফাইল পাথগুলিতে যে কোনও সিস্টেম কল এখনও ব্যর্থ হতে পারে এবং ডিরেক্টরি উপাদানগুলি অন্তরালে নামকরণ করা যেতে পারে।
আমরা যদি কোনও ডিরেক্টরি ট্রিতে একটি নির্ভরযোগ্য প্রতিবেদন পেতে পারি যা অন্যের দ্বারা সম্ভবত এটি লিখিত হয়, lsattrকমান্ড নিজেই অন্তর্ভুক্ত রয়েছে আরও কয়েকটি বিষয় যা আমাদের উল্লেখ করতে হবে:
lsattr -R .ডিরেক্টরি ট্রিটিকে যেভাবে অনুসরণ করে , এটি জাতি শর্তের সাপেক্ষে। .ডান মুহুর্তে সিমলিংকের সাহায্যে কয়েকটি ডিরেক্টরি প্রতিস্থাপনের মাধ্যমে ডিরেক্টরি গাছের বাইরে থাকা ডিরেক্টরি গাছের বাইরের ডিরেক্টরিতে এটি নামানো যায়।
- এমনকি
lsattr -d fileএকটি জাতি শর্ত আছে। এই বৈশিষ্ট্যগুলি কেবল নিয়মিত ফাইল বা ডিরেক্টরিতে প্রযোজ্য। সুতরাং lsattrএকটি করে lstat()চেক করার জন্য যে ফাইল ডান ধরনের এবং তারপর করে প্রথম open()দ্বারা অনুসরণ ioctl()বৈশিষ্ট্যাবলী পুনরুদ্ধার করতে। তবে এটি কল করে (না O_NOCTTY) open()ছাড়াই O_NOFOLLOW। কেউ প্রতিস্থাপন করতে পারে fileকরার জন্য একটি সিমবলিক লিঙ্ক দিয়ে /dev/watchdogমধ্যবর্তী উদাহরণস্বরূপ lstat()এবং open()এবং রিবুটের সিস্টেম কারণ। এটি open(O_PATH|O_NOFOLLOW)অনুসরণ করা উচিত fstat(), openat()এবং ioctl()এখানে বর্ণের পরিস্থিতি এড়াতে।