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


2

আমি একটি কমান্ড চালিয়েছি যা কিছু অনুসন্ধানের মানদণ্ডের ভিত্তিতে প্রচুর ফাইল খুঁজে পায়। এটি এর মতো ফাইলগুলি ফেরত দেয়:

./somepath/somepath/file.something
./asdf/asdf/s.php
./etc/a.php
./a/b/c/d/e/f/g.jpg

সুতরাং আমি ভাবছিলাম, যদি আমি এই আউটপুটটিকে কোনও ফাইলের (যেমন প্রতি লাইন প্রতি একটি ফাইল) ক্যাপচার করি তবে কেউ কি আমাকে একটি কমান্ড লিখতে সাহায্য করতে পারে যা ফাইলটির মাধ্যমে পুনরাবৃত্তি করে এবং ফাইলগুলিকে একটি করে নির্দিষ্ট ডিরেক্টরিতে সরিয়ে দেয়?

তুমাকে অগ্রিম ধন্যবাদ.

উত্তর:


3
while read -r filename
  do
  mv -- "$filename" directory
done < list_of_files.txt

পরীক্ষিত নয় (আমি উইন্ডোজ চলমান একটি পিসিতে আছি) তবে এটি কাজ করা উচিত।


প্রাথমিক পদ্ধতির শব্দটি দুর্দান্ত, তবে আপনার আসল সংস্করণটিতে "অস্বাভাবিক" ফাইলের নামের বিরুদ্ধে বেশ কয়েকটি সুরক্ষা অনুপস্থিত। সর্বদা ব্যবহার করুন read -r, যেমন প্লেইন readকিছু ব্যাকস্ল্যাশ প্রসারিত করে। পরিবর্তনশীল বিকল্পগুলির চারপাশে সর্বদা ডাবল উদ্ধৃতি ব্যবহার করুন যদি না আপনি কেন জানেন না ; উদ্ধৃতি ব্যতীত শেলটি সাদা স্থান এবং \[?*ফাইলের নামে প্রসারিত করবে । অবশেষে, কমান্ড লাইনের --ফাইলের নামগুলি mvকমান্ড -দ্বারা একটি বিকল্প হিসাবে বিবেচনা করা থেকে শুরু করে কোনও ফাইলের নাম সংরক্ষণ করে mv
গিলস 23

আপনি একেবারে সঠিক। সঠিক যত্ন ছাড়াই এটিকে ছিন্ন করে - সংশোধনের জন্য ধন্যবাদ thanks
কার্লএফ

ধন্যবাদ! আমি নিজে চেষ্টা করেও 30 লাইনের পিএইচপি স্ক্রিপ্ট দিয়ে শেষ করেছি।
mqchen

2
your_command | xargs -I% mv "%" dest_dir

যদি আপনার কমান্ডটি থাকে findবা আপনার কাছে নাল দিয়ে ফাইলের নামগুলি শেষ করার কিছু উপায় রয়েছে:

your_command | xargs -0 -I% mv "%" dest_dir

অথবা

find [find-args] -print0 | xargs -0 -I% mv "%" dest_dir

ফাইলের নাম শেষ করতে নাল ব্যবহার করে এটিকে ফাইলের সাথে কাজ করতে দেয় যা ফাঁকা স্থান, নিউলাইনস ইত্যাদি পারে contain

আপনি xargsযদি নিজের ফাইলটি ইতিমধ্যে তৈরি করে থাকেন তবে এটি প্রক্রিয়া করার জন্যও আপনি ব্যবহার করতে পারেন:

xargs -a filename -I% mv "%" dest_dir

তিনি যখন ফাইলগুলি সরাতে চান তখন কেন আপনি সরানোর নির্দেশনা দিচ্ছেন?
উদ্ভট

আমি বাজি ধরছি ডেনিস এটির একটি উদাহরণ থেকে অনুলিপি করেছে এবং এটি কাস্টমাইজ করে নি।
কার্লএফ

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

@ এমকিচেন: -I%ডেনিসের উত্তরে নোট করুন । এটি গুরুত্বপূর্ণ: এটি ছাড়া, xargsইনপুটটি অদ্ভুত উপায়ে উদ্ধৃত করা আশা করে এবং যদি আপনার ফাইলের নামগুলিতে শ্বেত স্পেস এবং এর মতো অক্ষর থাকে তবে ব্যর্থ হয় \'"
গিলস 23

-1

অন্য একটি বিকল্প, যদি ফাইলের নামগুলিতে কোনও শ্বেত স্থান না থাকে, তা হবে

mv `search_command_here` dest_directory

(ব্যাকটিক সিনট্যাক্সটিও ব্যাশ-ইস্ম, তবে প্রশ্নটি বিশেষভাবে উল্লেখ করেছে যে এটি লিনাক্সে রয়েছে এবং সমস্ত বড় লিনাক্স ডিস্ট্রোস ডিফল্টরূপে ব্যাশ ব্যবহার করে))


ব্যাকটিক সিনট্যাক্সটি লিনাক্স / ইউনিক্স-ইএসএম হতে পারে তবে এটি কোনও বাশিজম নয়। প্রতিটি বড় শেল এটি ব্যবহার করে। এমনকি পছন্দের $()বাক্য গঠনটি কোনও বাশিজম নয় কারণ এটি বেশিরভাগ আধুনিক শেলগুলিতে পাওয়া যায় এবং এটি পসিক্স দ্বারা নির্দিষ্ট করা হয়।
ডেনিস উইলিয়ামসন

*?[এই কমান্ডের সাহায্যে কেবল শ্বেতস্থান নয়, ফাইল নামের ওয়াইল্ডকার্ডস ( ) এবং ব্যাকস্ল্যাশগুলি শেল দ্বারা প্রসারিত হবে।
গিলস 23
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.