উত্তর:
statজিএনইউ থেকে কোর্টিলগুলি এটি করতে পারে:
stat -c '%U' /path/of/file/or/directory
দুর্ভাগ্যক্রমে, এর অনেকগুলি সংস্করণ রয়েছে statএবং তাদের বাক্য গঠনে অনেকগুলি ধারাবাহিকতা নেই। উদাহরণস্বরূপ, ফ্রিবিএসডি-তে এটি হবে
stat -f '%Su' /path/of/file/or/directory
তাহলে বহনযোগ্যতা একটি উদ্বেগের বিষয়, আপনি সম্ভবত ভালো আছেন ব্যবহার গিলেজ এর পরামর্শ মিশ্রন lsএবং awk। এটির পরিবর্তে দুটি প্রক্রিয়া শুরু করতে হবে তবে এটিতে কেবল পসিএক্স-মানক কার্যকারিতা ব্যবহার করার সুবিধা রয়েছে:
ls -ld /path/of/file/or/directory | awk '{print $3}'
stat(একটি সাইট-বিস্তৃত স্ট্যান্ডার্ড) থাকতে পারে /usr/local/bin), এবং খুব কমই উপলব্ধ অন্য কারনে।
stat -c '%U' DIRএটি মুদ্রণ করবে UNKNOWNযা আপনি কীভাবে দেখেন তার উপর নির্ভর করে কম সহায়ক বা আরও উপযুক্ত।
এর আউটপুট পার্সিং lsকরা খুব কমই একটি ভাল ধারণা , তবে প্রথম কয়েকটি ক্ষেত্র প্রাপ্তি ব্যতিক্রম, এটি আসলে সমস্ত "traditionalতিহ্যবাহী" ইউনিটগুলিতে কাজ করে (এটি কিছু উইন্ডোজ প্রয়োগের মতো প্ল্যাটফর্মগুলিতে কাজ করে না যা ব্যবহারকারীর নাম ফাঁকা করার অনুমতি দেয়)।
ls -ld /path/to/directory | awk 'NR==1 {print $3}'
আর একটি বিকল্প হ'ল statকমান্ড ব্যবহার করা , তবে statশেল থেকে সমস্যাটি হ'ল বিভিন্ন সিনট্যাক্স সহ একাধিক কমান্ড রয়েছে, সুতরাং statশেল স্ক্রিপ্টে অপ্রিয়যোগ্য (এমনকি লিনাক্স ইনস্টলেশন জুড়ে)।
নোট করুন যে প্রদত্ত ব্যবহারকারীর মালিক কিনা তা পরীক্ষা করা আলাদা প্রস্তাব।
if [ -n "$(find . -user "$username" -print -prune -o -prune)" ]; then
echo "The current directory is owned by $username."
fi
if [ -n "$(find . -user "$(id -u)" -print -prune -o -prune)" ]; then
echo "The current directory is owned by the current user."
fi
ls | awkদুর্ভাগ্যক্রমে এই পদ্ধতির সাথে কিছু সতর্কতা রয়েছে , যেমনটি আমি এখানে উল্লেখ করেছি । আমি আমার সাম্প্রতিক মন্তব্যে উল্লেখ করেছি, "টার্গেট ফাইল / ডির একটি আলাদা নামের একটি সিমিলিঙ্ক," এর জন্য আমি এখনও কোনও সমাধান নিয়ে আসিনি।
find . -user "$username" -print -prune -o -pruneআপনি কেবল করতে পারেনfind . -maxdepth 0 -user "$username"
awk 'NR==1 {print $3}'পরিবর্তে ব্যবহার করার কোনও কারণ আছে awk '{print $3}'? NR==1এখানে কেন প্রয়োজনীয় তা আমি নিশ্চিত নই ।
lsযেখানে কোনও পথে একটি নতুন লাইন দুটি লাইনকে বিভক্ত করে তোলে (যা আমি বিশ্বাস করি যে আপনি যে প্রান্তটি আবরণ করার চেষ্টা করছেন)? গনুহ উপর ls(নবীন সংস্করণ), busybox lsও FreeBSD lsএকটি newline যেমন ফিরিয়ে দেওয়া হয় $'\n', ?এবং ?যথাক্রমে।
জিএনইউ অনুসন্ধানের মাধ্যমে কেউ এটি করতে পারে:
find $directoryname -maxdepth 0 -printf '%u\n'
এটি জিএনইউ সিস্টেমের বাইরে বহনযোগ্য নয়, তবে লিনাক্স বিতরণটি যেখানে কাজ করে না তা পেয়ে আমি অবাক হয়ে যাব।
findনেই -printf।
-printf:-(।
খাঁটি বাশে আপনি আউটপুটটিকে lsএকটি অ্যারে এবং সূচকে রূপান্তর করতে পারবেন ।
# (lrwxr-xr-x, 1, myuser, staff, 36, Oct, 21, 16:36, /path/to/file)
file_meta=($(ls -ld /path/to/file))
file_owner="${file_meta[2]}" # myuser
এটি ব্যবহার হিসাবে হিসাবে মার্জিত নয় stat, findঅথবা awk, কিন্তু একটি চিম্টি মধ্যে কাজ করতে পারে।