Chmod ইন্টারেক্টিভ করার জন্য একটি লাইন কমান্ড আছে?


24

আমি এরকম কিছু খুঁজছি:

ls | ask_yes_no_for_each_file | chmod +x the_files_approved

বা অনুরূপ বাক্য গঠন।

অন্যান্য কমান্ডগুলির জন্যও কাজ করতে পারে যার জন্য আপনি স্বতন্ত্র নিশ্চিতকরণ চান।

উত্তর:


45

এটি আপনি যা খুঁজছেন তা করে:

find . -maxdepth 1 -type f -print0 | xargs -L1 -p0 chmod +x

এর findপরিবর্তে এটি ব্যবহার করে ls, সাধারণত, পার্সিং lsআউটপুট অবিশ্বাস্য । এই ফর্মটি ব্যবহার findকরেও ফাইলনামগুলির সাথে কাজ করবে এমনকি তাতে নতুন লাইন বা অন্যান্য কঠিন অক্ষর রয়েছে।

ব্যাখ্যা

  • find . -maxdepth 1 -type f -print0

    এটি ফাইল নির্বাচন করে। এটি অনেকগুলি বিকল্পের বিকল্প ব্যবহার করে কাস্টমাইজ করা যায়। বিকল্পটি নাল-বিচ্ছিন্ন তালিকায় ফাইলের নাম মুদ্রণ করতে print0বলে find। ফাইলের নামের তালিকা এইভাবেই প্রেরণযোগ্য reliable

  • xargs -L1 -p0 chmod +x

    এটি ফাইলের নামের নাল-বিচ্ছিন্ন তালিকাটি তৈরি করে findএবং এতে আপনার আদেশটি প্রয়োগ করে।

-L1বিকল্প বলে xargsএকবারে শুধুমাত্র একটি ফাইল নামের উপর কাজ করে। -pবিকল্প বলে xargsচালিয়ে যাওয়ার আগে অনুমোদনের জন্য প্রম্পট করতে। -0বিকল্প বলে xargsফাইলের নাম মধ্যে বিভেদক হিসাবে নাল অক্ষর ব্যবহার করতে।

[ @ কোয়ান এটি নির্দেশ না -pকরা xargsপর্যন্ত আমি বিকল্পটি সম্পর্কে অসচেতন ছিলাম ।]


আপনি findPOSIX কমান্ডটি ব্যবহার করে সামঞ্জস্য করতে পারেন -exec printf '%s\0' {} +। যদিও POSIX পুরো জিনিসটি সামঞ্জস্য করার কোনও উপায় নেই।
l0b0

এই সিনট্যাক্স আমাকে একটা সতর্কবাণী দেয় find: warning: you have specified the -maxdepth option after a non-option argument -type, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it). Please specify options before other arguments.সুতরাং এটি সঙ্গে কাজ করে -maxdepth 1সামনে -type f, যেমন: find . -maxdepth 1 -type f -print0 | xargs -L1 -p0 chmod +x
হার্ভে

@ হারেভে আপনি সঠিক: আমি এই সতর্কতাটি সরিয়ে দিতে উত্তর আপডেট করেছি।
1024

25

আপনি ব্যবহার করতে পারেন xargs

উদাহরণ:

ls|xargs -I path -p chmod +x path

বিকল্প -p: প্রতিটি কমান্ড লাইন চালাতে হবে এবং টার্মিনাল থেকে একটি লাইন পড়তে হবে কিনা সে সম্পর্কে ব্যবহারকারীকে অনুরোধ করুন। 'Y' বা 'Y' দিয়ে প্রতিক্রিয়া শুরু হলে কেবল কমান্ড লাইনটি চালান।


1
+1 আমি আপনার ব্যবহার xargs -pএত পছন্দ করি যে আমি এটি অনুলিপি করব।
1024

1
পারফেক্ট! বেশিরভাগ কমান্ডকে ইন্টারেক্টিভ করার খুব সহজ উপায়। ধন্যবাদ।
হার্ভে


@ ক্রোল্টান - কেন কেউ ফাইলের নামে একটি নতুন লাইন ব্যবহার করবেন?
nbubis

1
@nbubis এটি ঘটতে পারে: টার্মিনালে যান এবং টাইপ করে touch "a very long file nameএন্টার টিপুন। লাইন ধারাবাহিকতা দেখুন এবং কেবল সমাপ্তি উদ্ধৃতি টাইপ করুন এবং আবার এন্টার টিপুন। টেডা, ফাইলনেলে নতুন লাইন। দীর্ঘ ফাইলের নামটি টাইপ করতে অলসতার বাইরে।
Kroltan
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.