আমার ব্যস্তবক্স (রাউটার) এর জন্য একটি মার্জিত সমাধান দরকার ছিল, সমস্ত xargs বা অ্যারের সমাধানগুলি আমার পক্ষে অকেজো - সেখানে এই জাতীয় কোনও আদেশ উপলব্ধ নেই available আমরা 10 টি আইটেমের কথা বলছি এবং অগত্যা 10 দিন নয়, কারণ অনুসন্ধান এবং এমটাইম সঠিক উত্তর নয়। এস্পোর উত্তরটি সবচেয়ে সংক্ষিপ্ত এবং পরিষ্কার এবং সম্ভবত সবচেয়ে বিপরীত ছিল।
স্পেসগুলির সাথে ত্রুটি এবং যখন কোনও ফাইল মুছতে হয় না তখন উভয়ই স্ট্যান্ডার্ড পদ্ধতিতে সমাধান করা হয়:
rm "$(ls -td *.tar | awk 'NR>7')" 2>&-
আরও শিক্ষামূলক সংস্করণে বিট করুন: আমরা যদি অন্যভাবে জঞ্জাল ব্যবহার করি তবে আমরা এটি সব করতে পারি। সাধারণত, আমি এই পদ্ধতিটি ব্যবহার করে ভেরিয়েবলগুলি sh থেকে sh এ ফিরে যেতে (রিটার্ন) করতে পারি। যেহেতু আমরা পুরোটা সময় পড়তে পারি না যা করতে পারি না, আমি আলাদা হতে অনুরোধ করি: এই পদ্ধতিটি এখানে।
ফাইলের নামের ফাঁকা স্থান নিয়ে কোনও সমস্যা না করে .tar ফাইলগুলির উদাহরণ। পরীক্ষা করতে, "আরএস" "ls" এর সাথে প্রতিস্থাপন করুন।
eval $(ls -td *.tar | awk 'NR>7 { print "rm \"" $0 "\""}')
ব্যাখ্যা:
ls -td *.tarসময় অনুসারে বাছাই করা সমস্ত .tar ফাইলগুলি তালিকাবদ্ধ করে। বর্তমান ফোল্ডারে থাকা সমস্ত ফাইলগুলিতে প্রয়োগ করতে, "ডি * .আর" অংশটি সরান
awk 'NR>7... প্রথম 7 লাইন এড়িয়ে যায়
print "rm \"" $0 "\"" একটি লাইন তৈরি করে: আরএম "ফাইলের নাম"
eval এটি কার্যকর করে
যেহেতু আমরা ব্যবহার করছি rm, আমি উপরের কমান্ডটি কোনও স্ক্রিপ্টে ব্যবহার করব না! উইজার ব্যবহারটি হ'ল:
(cd /FolderToDeleteWithin && eval $(ls -td *.tar | awk 'NR>7 { print "rm \"" $0 "\""}'))
ls -tকমান্ড ব্যবহারের ক্ষেত্রে যেমন নিরীহ উদাহরণগুলিতে কোনও ক্ষতি করে না: touch 'foo " bar'এবং touch 'hello * world'। বাস্তব জীবনে আমরা কখনও এই জাতীয় নাম দিয়ে ফাইল তৈরি করি না!
সাইড নোট. আমরা যদি এইভাবে sh এর কাছে একটি ভেরিয়েবল পাস করতে চাইতাম, তবে আমরা কেবল মুদ্রণটি পরিবর্তন করব (সাধারণ ফর্ম, কোনও ফাঁকা জায়গা সহ্য করা হয় না):
print "VarName="$1
পরিবর্তনশীল সেট করতে VarNameমূল্য $1। একযোগে একাধিক ভেরিয়েবল তৈরি করা যেতে পারে। এটি VarNameএকটি সাধারণ sh পরিবর্তনশীল হয়ে যায় এবং পরে কোনও স্ক্রিপ্ট বা শেল এ সাধারণত ব্যবহার করা যেতে পারে। সুতরাং, awk সহ ভেরিয়েবলগুলি তৈরি করতে এবং সেগুলি শেলের কাছে ফিরিয়ে দিতে:
eval $(ls -td *.tar | awk 'NR>7 { print "VarName=\""$1"\"" }'); echo "$VarName"