উত্তর:
জিএনইউ / লিনাক্সে chownএবং chmodএকটি --referenceবিকল্প রয়েছে
chown --reference=otherfile thisfile
chmod --reference=otherfile thisfile
--referenceএর আগে chmodএবং এর chownআগে প্যারামিটারে মনোযোগ দিই নি ।
জিএনইউ ইউটিলিটি সহ যেকোন ইউনিক্সে, যেমন (নন-এম্বেড করা) লিনাক্স বা সাইগউইন, আপনি ব্যবহার করতে পারেন chmod --referenceএবংchown --reference ।
আপনার সিস্টেমে থাকে ACLs , ACL এর কমান্ড চেষ্টা getfaclএবং setfacl। এই আদেশগুলি সিস্টেম থেকে সিস্টেমে কিছুটা পৃথক হয় তবে অনেকের উপর আপনি getfacl other_file | setfacl -bnM - file_to_changeঅনুমতিগুলি অনুলিপি করতে ব্যবহার করতে পারেন । এটি মালিকানা অনুলিপি করে না; আপনি সাবধানতার সাথে পার্সিং দিয়ে এটি করতে পারেন ls -l other_file, ধরে নিবেন যে আপনার ব্যবহারকারীর বা গোষ্ঠীর নাম সাদা নেই ace
LC_ALL=C ls -l other_file | {
read -r permissions links user group stuff;
chown -- "$user:$group" file_to_change
}
getfacl other_file | setfacl -bnM - file_to_change
মাত্তিওর প্রতিক্রিয়া অবলম্বন করে একটি বাশ কমান্ড করেছে :)
কোড:
chmod $( stat -f '%p' "$1" ) "${@:2}"
ব্যবহার:
cp-permissions <from> <to>...
${*:2}? আবার কখনও না! এটির ব্যর্থ হবে যদি কোনও ফাইলের নামের মধ্যে স্থান (বা ট্যাব) থাকে। ব্যবহার "${@:2}"। এছাড়াও, ন্যায়বিচারের "$1"পরিবর্তে ব্যবহার করুন $1।
chmod "$(stat -c '%a' "$fromfile")" tofileGNU Coreutils এ, তবে আপনি --referenceসেই ক্ষেত্রে ব্যবহার করতে পারেন যেহেতু statCLI ইউটিলিটিটি পসিক্স ls -l নয় , এটি এমনকি বলে যে pubs.opengroup.org/onlinepubs/9699919799/utilities/ls.htmlthat এটি কাটবে না: " এলএসের আউটপুট (-l এবং সম্পর্কিত বিকল্পগুলির সাথে) এমন তথ্য রয়েছে যা যুক্তিসঙ্গতভাবে chmod এবং স্পর্শের মতো কোনও ইউটিলিটি দ্বারা একটি পরিচিত অবস্থায় ফাইল পুনরুদ্ধার করতে ব্যবহার করা যেতে পারে However তবে, এই তথ্যটি এমন ফর্ম্যাটে উপস্থাপন করা হয়েছে যা সেই সমস্ত ইউটিলিটিগুলি দ্বারা সরাসরি ব্যবহার করা যায় না বা হতে পারে সহজেই এমন বিন্যাসে অনুবাদ করা যায় যা ব্যবহার করা যায় ""
আপনি যদি GNU এর chmod / chown (যা --referenceবিকল্পটিকে সমর্থন করে ) দিয়ে কোনও সিস্টেম ব্যবহার না করে থাকেন তবে আপনি এর আউটপুট পার্স করার চেষ্টা করতে পারেনls -l
এখানে এর জন্য একটি ছোট স্ক্রিপ্ট chmod(যদি আপনার যদি এমন কোনও চিত্র থাকে যা প্রসারিত রেজিক্সগুলিকে সমর্থন করে তবে সেগুলি আরও বেশি পাঠযোগ্য উপায়ে লেখা যেতে পারে ...)
#!/bin/sh
reference=$1
shift
files=$*
# strip the permissions (whith extended regexes could be more readable)
OWNER=$(ls -l ${reference} | sed -e "s/.\(...\).*/\1/" | sed -e "s/[-]//g" )
GROUP=$(ls -l ${reference} | sed -e "s/....\(...\).*/\1/" | sed -e "s/[-]//g" )
OTHER=$(ls -l ${reference} | sed -e "s/.......\(...\).*/\1/" | sed -e "s/[-]//g" )
chmod u=${OWNER},g=${GROUP},o=${OTHER} ${files}
আপডেট :
এটি ব্যবহার করে আরও সহজ stat:
chmod $( stat -f '%p' ${reference} ) ${files}
ls -lআউটপুট পার্সিংয়ের পরিবর্তে আপনি statআউটপুট পার্স করতে পারবেন ।
statএখানে * বিএসডি সিনট্যাক্স ব্যবহার করছেন । আপনার chmod $(stat ...)কমান্ড কাজ করবে না কারণ %pএকা * BSD এর জন্য খুব বেশি তথ্য আউটপুট দেয়, কেবল u / g / o বিট আউটপুট chmodব্যবহার %Lpকরে। স্টিকি / সেটুইড / সেটগিড বিটগুলির জন্য আরও কিছু বিস্তৃতর প্রয়োজন।
আমি মাত্তিওর স্ক্রিপ্টে একটি সমন্বয় যুক্ত করতে চেয়েছি । লুপের জন্য এটিকে যাচাই করতে ব্যবহার করা উচিত যে ফাইলগুলি আসলে তাদের উপর chmod কমান্ড চালানোর আগে উপস্থিত রয়েছে। এটি স্ক্রিপ্ট ত্রুটি আরও করুণভাবে আউট করতে দেবে।
আমি মনে করি এটি সেরা বিকল্প কারণ এটি সোলারিস, লিনাক্স ইত্যাদির মতো সমস্ত * নিক্স ওএসের জন্য ব্যবহার করা যেতে পারে
#!/bin/sh
reference=$1
shift
files=$*
for file in $reference $files; do
[ -f $file ] || { echo "$file does not exist"; exit 1; }
done
# strip the permissions (whith extended regexes could be more readable)
OWNER=$(ls -l ${reference} | sed -e "s/.\(...\).*/\1/" | sed -e "s/[-]//g" )
GROUP=$(ls -l ${reference} | sed -e "s/....\(...\).*/\1/" | sed -e "s/[-]//g" )
OTHER=$(ls -l ${reference} | sed -e "s/.......\(...\).*/\1/" | sed -e "s/[-]//g" )
chmod u=${OWNER},g=${GROUP},o=${OTHER} ${files}
আমি দেখতে পেলাম যে আমার সোলারিস 10 টি মেশিনে একটিও statপাওয়া যায় নি। যদিও এটি আমার কনফিগারেশনের ক্ষেত্রে একটি সমস্যা হতে পারে।
এটি আমার পক্ষে কাজ করে:
cp -p --attributes-only <from> <to>