আপনি কীভাবে একই ফাইলনাম উপসর্গ সহ সমস্ত ফাইল একটি ডিরেক্টরিতে স্থানান্তর করতে (বা অনুলিপি করতে পারেন)?


9

বাশ ব্যবহার

সুতরাং আসুন আমি বলি যে আমার কাছে একটি গুচ্ছ ফাইল এলোমেলোভাবে একটি প্যারেন্ট ডিরেক্টরিতে রাখা হয়েছে ~/src, আমি একটি নির্দিষ্ট প্রত্যয়টির সাথে মেলে সমস্ত ফাইলগুলি ধরে ফেলতে এবং সেগুলি একটি ~/distডিরেক্টরিতে স্থানান্তর করতে (বা অনুলিপি করতে) চাই ।

আসুন এই উদ্দেশ্যে ধরে নেওয়া যাক যে সমস্ত ফাইলের নামের এই নামকরণ কনভেনশন রয়েছে:

<filename_prefix>.<filename_suffix>

আমি জানতে পেরেছিলাম যে এটি একটি নির্দিষ্ট দিয়ে সমস্ত ফাইল পেতে filename_suffixএবং এগুলিকে একটি দূরের ফোল্ডারে রাখার দ্রুত উপায় ছিল :

mkdir ~/dst
find source -name "*.xxx" -exec mv -i {} -t ~/dst \;

এখন এক পা এগিয়ে ... আমি খুঁজে আউটপুট কিভাবে ব্যবহার করতে পারেন, এই ক্ষেত্রে filename, এবং ব্যবহার filename_prefixমধ্যে একই নামের একটি ডিরেক্টরির জেনারেট করতে ~/distউপযুক্ত ডিরেক্টরির মধ্যে এবং তারপর সরানো (অথবা অনুলিপি করুন) সেই প্রেফিক্স সহ সমস্ত ফাইল?

mkdir ~/dst
find source -name "*.xrt,*.ini,*.moo" -exec mv -i {} -t ~/dst \;

মূলত, আমি কীভাবে উপরের কমান্ডটি পরিবর্তন করব (বা অন্য কোনও কমান্ড ব্যবহার করতে পারি), এর মতো একটি কাঠামো তৈরি করতে

(আউটপুট)

~/dist/people/people.xrt
~/dist/games/games.xrt
~/dist/games/games.moo
~/dist/games/games.ini
~/dist/monkeys/monkeys.ini
~/dist/monkeys/monkeys.xrt

এই জাতীয় ডিরেক্টরি গাছ থেকে?

(ইনপুট)

~/src/xrt/people.xrt
~/src/xrt/games.xrt
~/src/conf/games.ini
~/src/pack/monkeys.xrt
~/src/e344/games.moo
~/src/e344/monkeys.moo
~/src/en-us/monkeys.ini

উত্তর:


10

এক্ষেত্রে findকী করা উচিত তা জানানো জাহান্নাম হবে ।

খোল ব্যবহার করা ভাল:

for i in **/*.{xrt,ini,moo}; do
  FILE=$(basename "$i")
  DIR=~/dst/${FILE%.*}
  echo mkdir -p -- "$DIR"
  echo mv -i -t "$DIR" -- "$i"
done

ব্যবহার করুন shopt -s globstarকরতে **উল্লিখিত glob কাজ (বা ব্যবহার zsh!)। echoকমান্ডটি যা চান তা মুদ্রণ করে পরে সেগুলি সরিয়ে ফেলুন ।


ব্যাশ ব্যবহার করা কি একই রকম?
কোডেনিনজা

@ কোডেনঞ্জ shopt -s globstar, আমার সম্পাদনা দেখুন। যদি মাত্র দুটি স্তর থাকে তবে আপনি ব্যবহার করতে পারবেন */*.*এবং স্নিপেট যে কোনও শেলটিতে কাজ করবে।
গিলস 'অশুভ হওয়া বন্ধ করুন'

2

প্রতারণার সন্ধান কমান্ড লাইন:

find source -name "*.xrt,*.ini,*.moo" -exec env file={} bash -c 'base="$(basename "$file")";dir="dst/${base%.*}";mkdir -p "$dir";cp "$file" "$dir"' \;

LOL সন্ধানে ব্যাশ স্ক্রিপ্ট কল করার জন্য প্রায় কাজ।

= পি


1
অনুমান করুন যদি এমন কোনও ফাইল থাকে যা বলা হয় ... happy rm -rf /! এই ধরণের কোডটি -1 প্রাপ্য।
স্টাফেন গিমেনেজ

আপনার সম্পাদনাটি পর্যাপ্ত নয়: আসুন আমরা বলি যে আপনি একটি লিঙ্কটি ক্লিপ করেছেন এবং ডাউনলোড করেছেন Yay" rm -rf / "Rox0r.avi, আবার আবার সমস্যার মতোই আছে…
স্টাফেন গিমেনেজ

(এবং এই ধরণের প্রতিস্থাপন নিরাপদ করার কোনও উপায় নেই)।
স্টাফেন গিমেনেজ

1
আহ সম্ভবত এটি অন্যভাবে করা সম্ভব। মনে হচ্ছে যে নিম্নলিখিত কাজগুলো করেনঃ -exec bash -c 'command which uses "$1"' bash '{}' ';'। ভাল, যাইহোক এটি বেশ অর্থহীন।
স্টাফেন গিমেনেজ

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