প্রথম এক্স ফাইলগুলি কীভাবে সরানো যায়


21

হাজার হাজার অর্ডারড ফাইল সহ আমার কাছে এই বিশাল ফোল্ডার রয়েছে। প্রথম 5000s mvকমান্ডের মাধ্যমে সাবফোল্ডারে স্থানান্তরিত করা কি সম্ভব ? আপাতত আমি ফাইলগুলি সাথে সরিয়ে নিই

 mv *some_pattern* ./subfolder1/

আপাতত, আমি চিত্রগুলি এলোমেলোভাবে স্থানান্তরিত করি, প্রতিটি সাবফোল্ডারে ঠিক 5000 ফাইল না থাকলে এটি সত্যই গুরুত্বপূর্ণ নয়। এটা করতে একটি ভাল উপায় আছে কি?


উত্তর:


23
mv `ls | head -500` ./subfolder1/

12
(ধরে নিলাম যে কোনও ফাইলের নামের মধ্যে স্থান, ট্যাব, নিউলাইন, তারা, ওপেন স্কোয়ার ব্র্যাকেট নেই, প্রশ্ন চিহ্নের অক্ষর রয়েছে বা শুরু করে -বা .ধরে subfolder1
নিচ্ছি

@ স্টাফেনচেজেলস যদি ফাইলগুলিতে থাকে তবে আমরা কমান্ডটি কীভাবে পরিবর্তন করব?
পেইটি লি

$ sudo mv `ls | head -50000` 01/ sudo: unable to execute /bin/mv: Argument list too long
ব্রায়ান থমাস

15

সাথে zsh:

mv -- *(D.oN[1,5000]) ./subfolder1

নিয়মিত ফাইলগুলিতে তারা ডিরেক্টরিতে রয়েছে এমন 5000 টি সরাতে move

ডিক্সোগ্রাফিকভাবে সাজানো তালিকায় প্রথম 5000 এর জন্য:

mv -- *(D.[1,5000]) ./subfolder1

আপনি যদি আরগ তালিকা সম্পর্কে ত্রুটি পান তবে খুব দীর্ঘ । আপনি জারি করে zshবুটিন mvকমান্ডটি ব্যবহার করতে পারেন :

zmodload zsh/files

প্রথম।

POSIXly:

set --
for f in .* *; do
  [ "$#" -lt 5000 ] || break
  [ -f "$f" ] || continue
  [ -L "$f" ] && continue
  set -- "$@" "$f"
done
mv -- "$@" subfolder1/


বাশ ব্যবহার করে যদি ত্রুটি পাই তবে কী হবে?
ব্রায়ান থমাস

8

একটি সংস্করণ যা সহজ এবং বিশেষ অক্ষর, স্পেস ইত্যাদি সমর্থন করে

ls -Q dir1 | head -1000 | xargs -i mv dir1/{} dir2/

এই কাজ করার জন্য যেমন হল dir2থাকা আবশ্যক এবং আপনি অভিভাবক সংকলনে থেকে এটা চালানো আছে dir1এবং dir2

এটি 1000 ফাইল dir1 থেকে dir2 এ স্থানান্তরিত করবে।


সুন্দর! ls -Q -S dir1 | head -1000 | xargs -i mv dir1/{} dir2/ dir1 এ 1000 বৃহত্তম ফাইল স্থানান্তরিত করার জন্য (-এস আকারের দ্বারা ফাইল তালিকাভুক্ত করা হয়)
একলক

1
মনে রাখবেন যে প্রত্যাশিত ইনপুট ফর্ম্যাটটির ls -Qসাথে সামঞ্জস্যপূর্ণ কোনও আউটপুট উত্পাদন করে না xargs। এটি স্থান অক্ষরযুক্ত ফাইলের নামগুলির জন্য সহায়তা করে তবে ডাবল কোট বা ব্যাকস্ল্যাশ এবং ক্ষতির জন্য নয় টিএবি সহ নিয়ন্ত্রণ অক্ষরযুক্ত ফাইলের নামের জন্য।
স্টাফেন চেজেলাস

3

আপনার এই জাতীয় কিছু করার দরকার হতে পারে:

x=1
for file in *
do
    if [ "X$x" = "X#####" ]; then
        break
    fi
    mv $file <destination>
    x=`expr $x + 1`
done

এই স্ক্রিপ্টটি bash, ksh, sh এবং একাধিক UNIX রূপগুলিতে কাজ করে।


1
(প্রদত্ত কোনও ফাইলের নামের মধ্যে স্থান, ট্যাব, নিউলাইন, তারা, ওপেন স্কোয়ার ব্র্যাকেট, প্রশ্ন চিহ্নের অক্ষর বা - বা। দিয়ে দেওয়া শুরু করা হয়েছে এবং প্রদান destinationকরা হয়েছে এবং সেই তালিকায় নিজেই প্রদর্শিত হবে না))
স্টাফেন চেজেলাস

পছন্দ করুন এটি সমস্যার সমাধান করার একটি সম্পূর্ণ সমাধান নয়।
কার্লসন

3
  1. আপনি যে ডিরেক্টরি থেকে ফাইলগুলি সরাতে চান সেই ডিরেক্টরিটি পান
  2. কমান্ডের নীচে চালান

    find . -name 'Hello*.gz' | head -n 5000 | xargs -I {} mv {} /data01/path/ 

ইন findকমান্ড .(ডট) বর্তমান ডিরেক্টরির উল্লেখ করে

হ্যালো দিয়ে শুরু হওয়া এবং জিজেডের সাথে শেষ হওয়া ফাইলগুলি সন্ধান করে, প্রথমে 5000 টি ফাইল সরানো হবে /data01/path/


1

আমি এমভি বাশ ত্রুটিটি ছাড়াই সাফল্যের সাথে 50,000 পদক্ষেপ করতে সক্ষম হয়েছি

 ls | head -50000 | xargs -I{} sudo mv {} 01/

যথেষ্ট মজার বিষয়, এটি সাম্বা শেয়ারে ছিল, সুতরাং 50k সীমাটি হ'ল উইন্ডোজ এক্সপ্লোরার জিইউআই সাধারণত একটি ডায়ারে 60k এর বেশি ফাইল পছন্দ করে না।

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