আমি কীভাবে পুনরুত্থিতভাবে জটলা কাজ করতে পারি?


285

আমার কাছে একটি ডিরেক্টরি pdfsরয়েছে যা উপ-এবং সাব-ডিরেক্টরিগুলির একটি গুচ্ছ রয়েছে। আমি সমস্ত সাবফোল্ডারগুলির সমস্ত পিডিএফ ফাইলে মালিকানা পরিবর্তন করতে চাই। আমি কেবল এটি চেষ্টা করেছি:

chown -R someuser:somegroup *.pdf

... তবে এটি উপ-ডিরেক্টরিতে পিডিএফগুলির মালিকানা পরিবর্তন করে নি। ব্যবহারকারী এবং গোষ্ঠী উপস্থিত আছে।

ম্যান পেজ অনুসারে chown, এর -Rঅর্থটি পুনরাবৃত্ত হওয়া উচিত:

-R, --recursive
          operate on files and directories recursively

আমি কী মিস করছি?

উত্তর:


291

রিকার্সিভ মোড কেবল ফাইলগুলিতে নয় ডিরেক্টরিতে কাজ করে। '* .Pdf' গ্লোব ব্যবহার করে শেলটি ফাইল তালিকাটি ছাঁটাইতে প্রেরণ করছে, যা এই ফাইলগুলি দেখায় এবং এটি যে ফাইলগুলি দেখায় তার অনুমতিগুলি পরিবর্তন করে।

মনে রাখবেন, শেলগুলিতে, গ্লোবটি শেল দ্বারা মূল্যায়ন করা হয়, আদেশ নয় not যদি গ্লোব ফাইলগুলির সাথে মিলে যায় তবে সেগুলি কমান্ডের কাছে পাঠানো হবে এবং কমান্ডটি কখনই কোনও গ্লোব অস্তিত্ব জানতে পারে না। (এটি কীভাবে উইন্ডোজ কমান্ড প্রম্পট জিনিসগুলি ব্যবহার করত তার চেয়ে আলাদা)। আপনার যদি একটি dir থাকে, বিষয়বস্তু সহ কিছু:

machine:$ ls -F
file1.pdf  file2.pdf  other.txt  subdir/

এবং আপনি টাইপ করেছেন:

chown -R someuser:somegroup *.pdf

শেলটি প্রথমে তালিকা তৈরি করবে: file1.pdf file2.pdf

এবং তারপরে আপনার আদেশটি চালান:

chown -R someuser:somegroup file1.pdf file2.pdf

দেখুন -আর কাজ করার জন্য কোনও ডিরেক্টরি নেই। এটি আপনি যা চেয়েছিলেন তা করে - কমান্ড লাইনে দুটি ফাইলের মালিকানা পরিবর্তন করে, সেই উদ্বোধক-আর পতাকাটিকে উপেক্ষা করে।

আপনি যা চান তা করতে, '* .pdf'টিকে এই ডিরেক্টরি এবং উপ-ডিরেক্টরিগুলির জন্য একটি findনিদর্শন হিসাবে ব্যবহার করতে, আপনি ব্যবহার করতে পারেন যা কোনও ফাইলের নামের সাথে মেলে এমন ফাইলগুলি খুঁজে পেতে পারে (বা অনেকগুলি ক্রাইটেরিয়া) এবং একটি উপকমান্ডে যেতে পারে

find . -type f -name '*.pdf' | xargs chown someuser:somegroup

এটি বর্তমান দির থেকে শুরু হয় '' নামের প্যাটার্নের ফাইল (ফাইল টাইপ চ) অনুসন্ধান '*.pdf'করার জন্য xargs এ চলে যায়, যা chmod এ একটি কমান্ড লাইন তৈরি করে। প্যাটার্নটির চারপাশে উদ্ধৃতিগুলি লক্ষ্য করুন '*.pdf', মনে রাখবেন যে শেলটি যদি পারে তবে একটি গ্লোব তৈরি করবে, তবে আপনি চান যে প্যাটার্নটি এতে চলে গেছে find, তাই আপনাকে এটি উদ্ধৃত করতে হবে।

যেহেতু ফাইলের নামের মধ্যে স্পেস থাকতে পারে, আপনি এটিকে ফাঁকা স্থানের ফাইল-নাম নিরাপদ করতে একটি কৌশল ব্যবহার করতে চান:

find . -type f -name '*.pdf' -print0 | xargs -0 chown someuser:somegroup

ব্যাশ 3 এবং নিম্নের ক্ষেত্রে, আপনার এটি করার প্রয়োজন এটি। আরও শক্তিশালী গ্লোব্বিং ব্যাশ 4 (সহ shopt -s globstar) এবং অন্যান্য শেলগুলিতে উপলব্ধ। পুনরাবৃত্ত গ্লোব ব্যবহার করে zsh এ একই **:

chown -R someuser:somegroup ./**/*.pdf

1
shopt -s globstarপুনরাবৃত্তাকার গ্লোববিং করে সেই ব্যাশ 4 প্রতিফলিত করতে সম্পাদিত ।
কোজিরো

@ কোজিরো ধন্যবাদ! যেমন আপনি বলতে পারেন আমি এখনও bash3 ব্যবহার করি
রিচ

2
মূল পোস্টার দ্বারা দেখানো ম্যান পেজ অনুসারে, আমি খুঁজে পেয়েছি যে ডাবল-আর প্রকৃতপক্ষে ফোল্ডার এবং ফাইলগুলিতে মালিক পরিবর্তন করেছে। খোঁজার দরকার নেই। মিন্ট 15 ব্যবহার
gwideman

@ গ্রেডম্যানম্যান আমি জানি এটি পুরানো ... তবে হ্যাঁ, অবশ্যই -আর পুনরাবৃত্তি করে। ওপি-র কেবল খুব নির্দিষ্ট ধরণের পুনরাবৃত্তি নিয়ে একটি সমস্যা ছিল, একটি এক্সটেনশন এবং "ফাইল টাইপ ফাইল হয়" ফিল্টার করা হয়
রিচ হোমোলকা

পুনঃটুইট ওপি বলেছিল যে ফাইলগুলি পিডিএফএস নামে একটি ডিরেক্টরিতে ছিল, সুতরাং আমি ধরে নিয়েছিলাম যে সমস্যাটি পিডিএফএসকে ডিরেক্টরিটি পুনরাবৃত্তি করার জন্য কীভাবে নির্দিষ্ট করতে হবে এবং যে সমস্ত ফাইল রয়েছে পিডিএফএস, তাই সেগুলি বিশেষভাবে নির্বাচন করার দরকার নেই। তবে আপনার কাজটি সঠিকভাবে হতে পারে, যদি কাজটি কেবল পিডিএফ ফাইল নির্বাচন করা হয় এবং অন্যকে অপরিবর্তিত রেখে দেয়।
বিশ্বব্যাপী

52
chown -R someuser:somegroup /your/folder/here/*

এটি নির্দিষ্ট ফোল্ডারের সমস্ত ফাইল এবং সমস্ত উপ-ডিরেক্টরি এবং উপ-উপ-ডিরেক্টরিগুলিতে chown প্রয়োগ করবে। যত্ন সহকারে ব্যবহার করুন।


2
একরকম sudo chown -R user ./আমার জন্য কাজ করেছে, কিন্তু sudo chown -R user ./*হয়নি
স্লাভ

1
আমি জানি এটি পুরানো, তবে যদিও এটি শিরোনামটির উত্তর দেয়, প্রশ্নের উত্তর দেয় না। এটি ওপি ইতিমধ্যে যা চেষ্টা করেছিল তার থেকে কিছুটা খারাপ।
ধনী হোমোলকা

2
@ রিচহমলকাকে কেবল প্রশ্নের শিরোনামের কারণেই এখানে আনা হয়েছে, আমি এই উত্তরটি পেয়ে খুশি।
ফলিক্স গ্যাগন-গ্রেনিয়ার

@ ফলিক্সগ্যাগন-গ্রেনিয়ার যথেষ্ট মেলা। যদি এই উত্তরটি আপনার পক্ষে কাজ করে তবে আমি খুব খুশি। তবে এটি মূল প্রশ্নের জন্য কাজ করবে না।
সমৃদ্ধ হোমোলকা

এটি ডট ফাইলের মতো কাজ করবে না বলে মনে হয় .env
রায়ান

14

আপনি findইউটিলিটি ব্যবহার করতে পারেন :

find . -name '*.pdf' -exec chown someuser:somegroup {} +

চারপাশে উদ্ধৃতি ভুলবেন না দয়া করে *.pdf। অন্যথায় শেল এটি প্রসারিত করার চেষ্টা করবে। এর অর্থ ইতিমধ্যে শেলটি *.pdfবর্তমান ডিরেক্টরিতে পাওয়া সমস্ত পিডিএফ ফাইলের নামের সাথে প্রতিস্থাপন করবে । তবে আপনি যা চান তা তা নয়। আপনি উপ ডিরেক্টরিতে অবস্থিত পিডিএফ ফাইলগুলি সন্ধান করতে চান। বিটিডব্লিউ .: এটি আপনার chownকমান্ডের সাথেও সমস্যা ।


1
আমি উপরে দেখছি ছিল +পারফরম্যান্সের জন্য, ঝরঝরে কৌতুক। -exec command {} +এই-এক্সেক অ্যাকশনের এই রূপটি নির্বাচিত ফাইলগুলিতে নির্দিষ্ট কমান্ডটি চালায়, তবে প্রতিটি নির্বাচিত ফাইলের নাম শেষে অন্তর্ভুক্ত করে কমান্ড লাইনটি নির্মিত হয়; কমান্ডের অনুরোধের মোট সংখ্যা মিলিত ফাইলগুলির সংখ্যার তুলনায় অনেক কম হবে। কমান্ড লাইনটি একইভাবে নির্মিত হয় যা xargsতার কমান্ড লাইনগুলি তৈরি করে। {}কমান্ডের মধ্যে কেবলমাত্র একটি উদাহরণ অনুমোদিত। কমান্ডটি শুরু ডিরেক্টরিতে কার্যকর করা হয়।
প্যাট্রিক এম

@ প্যাট্রিকএম এক (অপ্রাপ্তবয়স্ক) + বনামের অন্যান্য সুবিধা; .... প্লাস শেল মেটা চরিত্র নয় এবং
এড়াতে

6

আদেশ

chown -R someuser:somegroup *.pdf

ডিরেক্টরিটির নাম .pdf এ শেষ হলে কেবল ডিরেক্টরিগুলি পুনরাবৃত্তি করবে । আপনার মতো কিছু দরকার:

find . -name "*.pdf" -exec chown someuser:somegroup {} \;

প্রযুক্তিগতভাবে এটি কেবল এক স্তরে চলে যাবে। আপনি যে সত্য পুনরাবৃত্তি কল করুন বা না এটি ব্যবহারকারীর জন্য অনুশীলন :)
রিচ হোমোলকা

1

কোনও ডিরেক্টরিটির মালিকানা পরিবর্তন করতে পুনরাবৃত্তভাবে সহজভাবে ব্যবহার করুন:

sudo chown -R <username>:<groupname> <dir name>

এখানে ব্যবহারকারীর নাম = নতুন ব্যবহারকারী যিনি ডিরেক্টরি মালিক হতে হবে

গ্রুপের নাম = নতুন গ্রুপ যা ডিরেক্টরিতে মালিক হওয়া উচিত

প্রতিটি ফাইল / ডিরেক্টরিতে একজন ব্যবহারকারী এবং একটি গ্রুপের মালিক থাকে


এটি ওপি যা বলেছিল তা করে না। এটি সমস্ত কিছুর মালিকানা বদলে দেয়, ওপিতে একটি নির্দিষ্ট ফাইলের সেট চেয়েছিল।
সমৃদ্ধ হোমোলকা

0

treeপরিবর্তে আমি ব্যবহার :

 sudo tree -fai ~/.blabla  | xargs -L1 -I{} sudo chown youruser:youruser {}

'/' ডিরেক্টরিতে বা অন্য সিস্টেম ডিরেক্টরিতে পুনরাবৃত্ত ছাঁটা বা chmod না চালাতেও যত্ন নিন।


0

ডিরেক্টরিতে সমস্ত ফাইলের মালিক হতে, ব্যবহার করুন

find directory -type f -name '*' | sudo xargs -d '\n' chown $USER

পরিবর্তে

sudo chown $USER directory\*

অথবা

sudo chown --recursive $USER directory

যা * (ডিরেক্টরিতে অনেকগুলি ফাইল) দ্বারা উত্পাদিত অনেকগুলি আর্গুমেন্ট বা যথাক্রমে আপনি যা চান তা না করে যদি কাজ না করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.