সিস্টেমে (এবং ফাইল সিস্টেমগুলি) SEEK_HOLE
lseek
পতাকা সমর্থন করে (আপনার উবুন্টু 12.04 যেমন এক্সট 4 তে) এবং SEEK_HOLE
লিনাক্সে যেমন রয়েছে তার মান 4 হিসাবে ধরে নেওয়া :
if perl -le 'seek STDIN,0,4;$p=tell STDIN;
seek STDIN,0,2; exit 1 if $p == tell STDIN'< the-file; then
echo the-file is sparse
else
echo the-file is not sparse
fi
সেই শেল সিনট্যাক্সটি পসিক্স। এটা অ পোর্টেবল উপাদান আছে perl
এবং যে SEEK_HOLE
।
lseek(SEEK_HOLE)
ফাইলের প্রথম গর্তের শুরুতে , বা কোনও ছিদ্র না পাওয়া গেলে ফাইলের শেষের দিকে খোঁজ করে । উপরে আমরা জানি ফাইলগুলি বিচ্ছিন্ন হয় না যখন ফাইলগুলি lseek(SEEK_HOLE)
আমাদের শেষের দিকে নিয়ে যায় (একই জায়গায় lseek(SEEK_END)
)।
আপনি যদি স্পার্স ফাইলগুলি তালিকাবদ্ধ করতে চান:
find . -type f ! -size 0 -exec perl -le 'for(@ARGV){open(A,"<",$_)or
next;seek A,0,4;$p=tell A;seek A,0,2;print if$p!=tell A;close A}' {} +
জিএনইউ find
(সংস্করণ ৪.৩.৩) থেকে একটি ফাইলের স্বল্পতা সম্পর্কে -printf %S
রিপোর্ট করতে হবে। এটি ফ্রয়েস্টচুটজের জবাবের মতো একই পদ্ধতি নেয় যেহেতু এটি ফাইলের আকারের তুলনায় ডিস্কের ব্যবহারের অনুপাত গ্রহণ করে, তাই সমস্ত স্পার্স ফাইলের প্রতিবেদন করার নিশ্চয়তা দেওয়া হয় না (যেমন যখন ফাইল সিস্টেমের স্তরে সংক্ষেপণ থাকে বা যেখানে গর্ত দ্বারা স্থান সংরক্ষণ হয় না) ফাইল সিস্টেমের অবকাঠামো ওভারহেড বা বৃহত বর্ধিত বৈশিষ্ট্যগুলির জন্য ক্ষতিপূরণ), তবে এমন সিস্টেমগুলিতে কাজ করবে যা নেই বা ফাইল সিস্টেম যেখানে প্রয়োগ করা হয়নি। জিএনইউ সরঞ্জাম সহ এখানে:SEEK_HOLE
SEEK_HOLE
find . -type f ! -size 0 -printf '%S:%p\0' |
awk -v RS='\0' -F : '$1 < 1 {sub(/^[^:]*:/, ""); print}'
(মনে রাখবেন যে এই উত্তরটির পূর্ববর্তী সংস্করণটি find
উদাহরণস্বরূপ 3.2e-05 হিসাবে স্বল্পতা প্রকাশ করার সময় সঠিকভাবে কাজ করে নি it @ ফ্ল্যাশডেভের উত্তরটি আমার নজরে আনার জন্য ধন্যবাদ )