সংখ্যাযুক্ত ফাইলের একটি পরিসর সরাবেন?


14

আমি 291 নম্বরযুক্ত ফাইল পেয়েছি (001 - শিরোনাম থেকে শুরু করে 291 - শিরোনামে) যা পৃথক ডিরেক্টরিতে স্থানান্তরিত করা দরকার। (001 থেকে 021 ফোল্ডার 1 এ, 022 থেকে 053 ফোল্ডার 2 এ, তারা অগত্যা প্রতিবার একই সংখ্যক ফাইল নয়)।

আমি অনুভব করেছি যে আমি এটি একরকমভাবে এটি করতে পারি: ls | head -n 21 | sed -r 's|(.*)|mv \1 /path/to/folder1|' | sh

আমি প্রায় ইতিবাচক একটি ভাল উপায় আছে, তাই এটি কি হবে?

সম্পাদনা: সুতরাং এটি ভাল কাজ করতে হবে, কিন্তু আমার মনে আছে ...

আমি টার্মিনালটি ব্যবহার করে আটকে নেই, তাই ক্লিক এবং টেনে আনতে আমি একটি ফাইল ম্যানেজার ব্যবহার করেছি। প্রশ্ন এখনও দাঁড়িয়ে।


1
আপনি ফোল্ডার 1 এ 21 সাবফোল্ডার এবং 2 ফোল্ডারে 22 ফোল্ডার চান?
ড্যানিয়েল বেক

আপনি ইউনিক্স.এসই পর্যালোচনা করেছেন? এখানে এটির জন্য
ক্রিশ্জলি

@ ড্যানিয়েলবেক না, আমি ফাইলগুলি প্রতিটি ফোল্ডারে স্থানান্তরিত করতে চাই। প্রতিটি ফোল্ডারে আলাদা আলাদা ফাইল রয়েছে।
রব

@ ক্রিসজে.লি এটি আমি যা করছিলাম / আগে যা করেছি তার সাথে বেশ মিল, আমি এটি পছন্দ করি। যেহেতু ফাইলগুলি অন্য ফোল্ডারে অন্য ফাইলগুলির সাথে মিলে যায় তাই আমি ls -l | grep ^- | wc -lলাইনের সংখ্যা পেতে পারি ।
রব

1
@ রব ডান তবুও, প্রতিটি ডিরেক্টরিতে ফাইলের বিভিন্ন সংখ্যা। এটিকে স্বয়ংক্রিয় করে তোলা (বিধিগুলি সহ) কয়েকবার নিজের চেয়ে বেশি চেষ্টা করা।
ড্যানিয়েল বেক

উত্তর:


25

যেহেতু আপনি বলেছিলেন যে ফাইলগুলিকে ম্যানুয়ালি সরানো দরকার সে তুলনায় এটি ঠিক 21 ফাইল নয় এবং কার্যকরভাবে আপনি ব্রেস প্রসারণ ব্যবহার করতে পারেন :

mv filename{001..21} dir1
mv filename{022..53} dir2
...

দেখে মনে হচ্ছে এটি কার্যকর হতে পারে, আমি এটি চেষ্টা করে দেখব।
রব

1
যদি আপনি বন্ধনীগুলির পরে কোনও ওয়াইল্ডকার্ড যুক্ত করেন তবে এটি পুরোপুরি কাজ করে। এটাই আমার দরকার ছিল।
রব

2
যদি নামটি মাঝখানে থাকে তবে আপনি লিখতে পারেন file{001..21}name, আপনার ওয়াইল্ডকার্ড ব্যবহার করতে হবে না। যাইহোক, খুশি এটি আপনার জন্য কাজ করে।
drrlvn

1

এটি আপনার বর্ণিত হিসাবে ফাইলগুলি সরিয়ে ফেলবে (দ্বিতীয় 21 টি ফাইলের জন্য দ্বিতীয় পরিসর 022 থেকে 042 হবে)।

for ((i = 1; i <= 291; i++))
do
    ((d = (i - 1) / 21 + 1))
    printf -v file 'filename%03d' "$i"
    printf -v dir  'dirname%02d'  "$d"
    [[ -d "$d" ]] && mkdir "$d"
    mv "$f" "$d"
done

এটি সর্বদা 21 ফাইল নয়, তবে ধন্যবাদ।
রব

0

আমার অর্থ হ'ল প্রচুর ফাইল সরিয়ে নেওয়া (দশ হাজার বা এক মিলিয়ন এর মতো), শেল ফাইল তালিকা সম্পর্কে খুব দীর্ঘ অভিযোগ করবে যদি আপনি কেবল {1..20 use ব্যবহার করেন, তাই

ইন zsh , আপনি লোড করতে পারেন এমভি builtin:

সেটপট এক্সটেন্ডেড_গ্লোব জ্যামডলোড

zsh / ফাইল

এটি করার পরে, আপনি কমান্ডটি ব্যবহার করতে পারেন:

mv ./somefolder/{1..100000}.txt  pathto/yourfolder/

অথবা আপনি কিছু শেল স্ক্রিপ্ট লিখছেন, আপনি এই জাতীয় কিছু করতে পারেন:

for i in `seq $start $end`;  
    do  mv "prefix${i}suffix.txt" pathto/yourfolder/  
done

যদি আপনি zsh ব্যবহার না করে থাকেন তবে আপনি /unix/128559/solving-mv-argument-list-too-long উল্লেখ করতে পারেন


যদিও এই লিঙ্কটি প্রশ্নের উত্তর দিতে পারে, উত্তরের প্রয়োজনীয় অংশগুলি এখানে অন্তর্ভুক্ত করা এবং রেফারেন্সের জন্য লিঙ্কটি সরবরাহ করা ভাল। লিঙ্কযুক্ত পৃষ্ঠাগুলি পরিবর্তিত হলে লিঙ্ক-শুধুমাত্র উত্তরগুলি অবৈধ হতে পারে। কোন উত্তর আপনি "আরও বিস্তারিত উত্তর" হিসাবে উল্লেখ করছেন?
রামহাউন্ড

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