স্বয়ংক্রিয়ভাবে সম্পূর্ণ নতুন ফাইল


13

আমার একটি প্রক্রিয়া রয়েছে যা পাঠ্য ফাইল তৈরি করে যার ফাইল নামগুলি তাদের তৈরির মুহুর্তের টাইমস্ট্যাম্পের উপর ভিত্তি করে:

$ ls
1378971222.txt
1378971254.txt
1378971482.txt
1378971488.txt
1378972089.txt
1378972140.txt
1378972141.txt
1378972153.txt
1378972155.txt
1378972241.txt

আমি কীভাবে সাম্প্রতিক তৈরি ফাইলের ফাইল নামটি সর্বশেষতম মাইটাইম সহ ফাইলটি স্বয়ংক্রিয়ভাবে পূর্ণ করতে পারি ? এই ফাইলগুলির জন্য ট্যাব-সমাপ্তি ব্যবহার করার কোনও উপায় নেই কারণ ফাইলের নামের প্রতিটি অক্ষর অন্য একটি ফাইলের সাথে ভাগ করা হয়। আমি একটি শর্টকাট (যেমন Alt .শেষ কমান্ডের শেষ যুক্তিটি স্বয়ংক্রিয়ভাবে পূর্ণ করে তোলে) সন্ধানের জন্য প্রত্যাশা করছি । আমি নিম্নলিখিত ওরফে যা জন্য মহান concoct পরিচালিত VIM, কিন্তু আমি জানার সাধারণ শর্টকাট যদি উপস্থিত থাকে যে আমি সঙ্গে ব্যবহার করতে পারে চাই kde-open, sqlite3, এবং অন্যান্য অ্যাপ্লিকেশন।

alias lastest="vim `ls -t | grep -vE "^total [0-9]*$" | head -n1`"


এগুলি সব পড়ার পরে, ব্যাশ শেলের মধ্যে সর্বশেষ ফাইলপথ (একটি লা বাশ সম্পূর্ণ হওয়া এবং আশা করি, কালক্রমেও ক্রমক্রমে চলতে হবে) aোকাতে কী-বোর্ড শর্টকাট রাখার বিষয়ে এখনও সন্তুষ্টির কোনও উত্তর নেই বলে মনে হচ্ছে?
রোমান সুসি

@ রোমানসুসি: নিকটতম এই উত্তরটি ওয়েডেনরিন্ডের দ্বারা, তবে এটি কেবল একটি $(ls -t|head -1)লাইনে আক্ষরিক সন্নিবেশ করায় । অতএব, কোনও সাইক্লিং নয়। সন্তোষজনক উত্তরের অনুপস্থিতিতে, আমি সেই উত্তরটি গ্রহণ করেছিলাম যা আমাকে সবচেয়ে বেশি শিখিয়েছিল এবং সর্বাধিক উপযোগিতা সরবরাহ করে।
dotancohen

অবশ্যই। এটি কেবল আমার কাছে ঘটেছিল এটি শীতল শেল বৈশিষ্ট্য হতে পারে এবং কেন এখনও কেউ এটিকে প্রয়োগ করেনি তা অবাক করে দিয়েছিল।
রোমান সুসি

উত্তর:


6

শুধু vimওরফে থেকে অপসারণ করুন । এরকম কিছু করুন:

alias latest='ls -tr | tail -n 1'

এরপরে আপনি সর্বশেষতম ফাইলগুলি খুলতে যে কোনও প্রোগ্রাম ব্যবহার করতে পারেন:

emacs `latest`
ls `latest`
mv `latest` ../

প্রভৃতি

যাইহোক, যদি আপনার ফাইলের নামের ফাঁকা স্থান বা অদ্ভুত অক্ষর থাকে তবে এটি কখনই ভেঙে দেওয়া উচিতls । আরও ভাল উপায় হতে পারে এরকম কিছু (এটি আপনার যুক্ত করুন .bashrc):

function latest(){
  $1 "$(find . -type f -printf "%C@ %p\n" | sort | tail -n 1 | cut -d " " -f 2-)"
}

এই ফাংশনটি আপনাকে আর্গুমেন্ট হিসাবে যে কোনও আদেশ দেয় তা কার্যকর করে এবং findকলটির (সর্বশেষ ফাইল) ফলাফলটি সেই আদেশে প্রেরণ করে। সুতরাং, আপনি এই জাতীয় জিনিসগুলি করতে পারেন:

latest emacs
latest less

আপনার যদি প্রয়োজন হয় mv $(latest) foo/তবে এর পরিবর্তে এটি চেষ্টা করে দেখুন things

function latest(){
   A=(${@})
   prog=$1;
   lat=$(find . -type f -printf "%C@ %p\n" | sort | tail -n 1 | cut -d " " -f 2-)
   if [ ! -z $2 ] ; then 
     args=${A[@]:1}; 
     $prog "$lat" "${A[@]:1}"
   else
     $prog "$lat"
   fi
}

তারপরে, সর্বশেষতম ফাইলটি অনুলিপি করতে bar/, আপনি তা করবেন

latest cp bar

এবং আপনি এখনও latest emacsআগের মতো করতে পারেন ।


ধন্যবাদ, আমি এখানে বেশ কয়েকটি জিনিস শিখতে পারি।
dotancohen

আমি প্রস্তাব দিই alias latest='\ls -tr | tail -n 1'- যদি আপনি lsঅ্যালিজ করে থাকেন তবে এটি কাজ করবে ।
ডোমেন

6

আপনি সহজেই এটিকে কনফিগারzsh করতে পারেন , যেমন এর মতো কিছু দিয়ে:

zstyle ':completion:*' file-sort date

(আপনি লাইনটি এমনভাবে পরিবর্তন করতে পারেন যে এই স্টাইলটি কেবলমাত্র নির্দিষ্ট ফাইলের নামের জন্য ব্যবহৃত হয়)

zsh বাশের সাথে খুব মিল, আপনি সম্ভবত এটিকে ব্যাশের সুপারিট বলতে পারেন - বৈশিষ্ট্য- / ব্যবহারের ভিত্তিতে।

তবে সম্ভবত বাশের একই বৈশিষ্ট্য রয়েছে।


ধন্যবাদ, এটি দুর্দান্ত। কয়েকটি কারণে আমি সরে না যাওয়া পছন্দ করি zshতবে যদি আমি কখনও করি তবে আমার এই বুকমার্ক রয়েছে!
dotancohen

আমাকে পরিচয় করানোর জন্য আপনাকে ধন্যবাদ zsh!
dotancohen

3

যেহেতু সর্বশেষতম ফাইলটিও সর্বশেষে বাছাই করা হয়েছে, আপনি ব্যবহার করতে পারেন menu-complete-backwardmenu-completeএবং menu-complete-backwardসম্পূর্ণকরণের মাধ্যমে চক্র বা প্রথম বা শেষ সমাপ্তি sertোকান। আমি তাদের বিকল্প-ট্যাব এবং শিফট-ট্যাবে আবদ্ধ করেছি ~/.inputrc:

"\e\t": menu-complete
"\e[Z": menu-complete-backward

\e[Zআপনি শিফ্ট-ট্যাব টিপলে আপনার টার্মিনাল এমুলেটরটি সন্নিবেশ করতে পারে না । আপনি কী সংমিশ্রণটি টিপলে কোন পাঠ্য সন্নিবেশ করা হয়েছে তা ব্যবহার করুন C-vবা cat -vদেখুন।


আসলে, ফাইলগুলি বর্ণানুক্রমিকভাবে বাছাই করা হয়, কালানুক্রমিকভাবে নয়। আমি যদি কালানুক্রমিকভাবে বাছাই করতে পারি তবে আমি তথ্যটি দিয়ে আপডেট করব।
dotancohen

2

প্রশ্নের পটভূমি হ'ল ব্যবহারের গতি। আমি একটি কীবোর্ড ম্যাক্রোকে সবচেয়ে উপযুক্ত বলে মনে করি। এতে যুক্ত করুন ~/.inputrc:

# Alt-L --> newest file in directory
"\el": "$(ls -t|head -1)"

আরও ধারণাগুলি: মূলত, আমি এমন কিছু চাইছিলাম যা আমাকে প্রথম, দ্বিতীয়, তৃতীয়তম নতুন ফাইল দেয় gives একটি ধারণা হবে, স্থানগুলি একটি টোকেন দিয়ে চিহ্নিত করা, যেমন "গ্রেপ এক্স _", তারপরে একটি কীবোর্ড ম্যাক্রো চালান "\ সি-অ্যালেস্ট-এক্সপেনশন \ সেমি" এবং "সর্বশেষ-সম্প্রসারণ" একটি অভিশাপ-নির্বাচন তালিকাটি বেছে নেওয়ার জন্য অনুরোধ করে কমান্ড লাইনে প্রতিটি "_" টোকেনের জন্য সর্বশেষতম ফাইল।

আমি এটিকে একটি গুরুত্বপূর্ণ প্রশ্ন হিসাবে বিবেচনা করছি, কারণ শেল এর উপরে জিইউআইয়ের একটি আর সুবিধা আমার পক্ষে সম্প্রতি ব্যবহৃত / নির্মিত ফাইল এবং ডিরেক্টরি নির্বাচন করা। autojumpডিরেক্টরিগুলির জন্য কিছুটা সহায়তা করে, ফাইলগুলির জন্য একটি সমাধান অনুপস্থিত।


আপনাকে ধন্যবাদ, এটি সহায়ক। নোট করুন যে এটি $(ls -t|head -1)ব্যাশ লাইনে একটি আক্ষরিক সন্নিবেশ করায় তাই এটি ব্যাখ্যা করা দরকার। এটি এটিকে কম দরকারী করে তোলে তবে এটি এখনও একটি দুর্দান্ত কৌশল।
dotancohen
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.