ডিরেক্টরিতে কীভাবে ফাইলগুলিকে `03.mp3 01.mp3 02.mp3` (s ls -f`) পুনরায় অর্ডার করবেন?


11

শারীরিক অর্ডার ফাইলের গুরুত্বপূর্ণ যখন আমি তাদের আমার USB স্টিক সম্মুখের কপি এবং গাড়ী MP3 প্লেয়ার শুনুন। আমার সঙ্গীত অ্যালবাম ফোল্ডার অধিকাংশই হয় পাঁচমিশালী , যেমন ls -fউত্পাদন করতে পারেন:
03.song3.mp3
01.song1.mp3
02.song2.mp3

যখন আমি সেই ফোল্ডারটি আমার ইউএসবি স্টিকের অনুলিপি করি তখন ফাইলগুলি সেই ক্রমে অনুলিপি করা হয় । আমার গাড়ি এমপি 3 প্লেয়ারগুলি ফাইলগুলি অরসেটেড ক্রমে প্রদর্শন করে, যা আমি চাই না। পরবর্তীকালে আমি ইউএসবি স্টিকের ফাইলগুলি পুনঃক্রম করতে পারি (দেখুন: ফোল্ডারগুলি কীভাবে পুনঃক্রম করতে হবে? (যেমন `ls -U` এ প্রদর্শিত হয়েছে) ), তবে আমি যদি আমার হার্ড ড্রাইভে তাদের ডিরেক্টরিতে এই ডিরেক্টরিতে পুনর্বিন্যাস করতে পারি তবে তা সম্পূর্ণরূপে এড়াতে পারি (ext4 )? এটা করার কোন উপায় আছে?

(এটি ব্যর্থ হয়ে, একটি findকমান্ড লেখার একটি উপায় থাকতে পারে , যা ফাইলগুলি পেয়ে যায়, সেগুলি সাজায় এবং তারপরে সেগুলি অনুলিপি করে ??) কোনও পরামর্শ?


বিকল্পভাবে, আপনি তাদের এমপি 3 প্লেয়ারে অনুলিপি করার পরে ফাইলগুলি বাছাই করতে পারেন : superuser.com/questions/368623/…
eswald

উত্তর:


5

আপনি ext4 এ এটি করতে সক্ষম হবেন এমন সম্ভাবনা কম। ডিরেক্টরিতে ফাইলের রৈখিক টেবিল ব্যবহার করে FAT (32) এর বিপরীতে, আধুনিক ফাইল সিস্টেমগুলি জটিল কাঠামো যেমন B + ট্রি (এনটিএফএস, এক্সএফএস) বা হ্যাশেড বি-ট্রি (ext3 / 4) ব্যবহার করে, যেখানে সমস্ত এন্ট্রি অনুসারে বাছাই করা হয় একটি নির্দিষ্ট অ্যালগরিদম

বিশেষত, ext3 / 4 ফাইলগুলি তাদের নামের হ্যাশ মান অনুসারে বাছাই করে, তাই আপনি সর্বদা একই ক্রমে একই ফাইলগুলি পান। এর মাধ্যমে dir_index বৈশিষ্ট্যটি অক্ষম করা সম্ভব tune2fs, তবে আপনার যদি অনেকগুলি ফাইল ধারণকারী ডিরেক্টরি থাকে তবে আপনার পারফরম্যান্সের জন্য ব্যয় করতে পারে।


এটির জন্য একটি খুব বেসিক কমান্ড হতে পারে cp dir/* otherdir/, যেখানে শেলটি যুক্তি প্রসারিত করার সময় নামগুলি সাজায় এবং cpপ্রদত্ত ক্রমে কেবল অনুলিপি করে।

উপ-ডিরেক্টরিগুলি অনুলিপি করার জন্য আরও জটিল কিছু:

#!/usr/bin/env bash
srcdir=$1
destdir=$2

find "$srcdir" \( -type d -printf "0dir %P\0" \) \
            -o \( -type f -printf "1file %P\0" \) |
sort -z | while read -r -d '' type path; do
    case $type in
        "0dir") mkdir -vp "$destdir/$path";;
        "1file") cp -v "$srcdir/$path" "$destdir/$path";;
    esac
done

এটা যেমন সম্ভব moveফাইল বলতে new_tmpফোল্ডারের, এবং তারপর তাদের চলন্ত ফিরে কিন্তু অর্ডার নির্দেশ? (ফোল্ডারগুলির জন্য কোনও জিইউআইয়ের মধ্যে থেকে কাজ করার জন্য মনে হচ্ছে?!)
আজো

1
@ জাজো: যদি ফাইল সিস্টেমটি dir_index সক্ষম করে থাকে তবে এটি কাজ করবে না। আপনি যে আদেশটি ফাইলগুলিতে সরান / তৈরি করেন না কেন, তাদের একই নাম থাকবে যতক্ষণ না তাদের একই সাজানোর ক্রম থাকবে। উদাহরণস্বরূপ, চেষ্টা করুন mkdir test1 test2; touch test1/{a,b,c,d} test2/{d,c,b,a}; ls -f test1 test2- ফাইলগুলি একই ক্রমে সাজানো হবে ( a c b .. d .আমার সিস্টেমে) যদিও সেগুলি বিপরীতে তৈরি করা হয়েছিল।
ব্যবহারকারী1686

cp dir/* otherdir/অনেক সহজ মনে হচ্ছে, কিন্তু মূল অর্ডার ব্যবহার করে। আমি কি সেখানে বাছাই বাস্তবায়ন করতে পারি?
Ajo

2
@ajo: শেলটি প্রবর্তনের আগে ফাইলের নামগুলি বাছাই করার কথা cpecho dir/*তারা কি প্রসারিত তা দেখার চেষ্টা করুন । তবে আবার, এটি কেবলমাত্র FAT মেমরির স্টিকগুলিতে অনুলিপি করার সময় গুরুত্বপূর্ণ; ext4 এ অনুলিপি করার সময় এটি কোনও পরিবর্তন হবে না
user1686

1
এটি কি একক ডিরেক্টরিতে ঠিক আছে? find SRC_DIR -iname '*mp3' -print0 | sort -z | xargs -0 -I {} cp {} DEST_DIR
Ajo

2

দেখে মনে হচ্ছে অন্যদেরও একই সমস্যা রয়েছে

এমন সরঞ্জাম যা ব্যবহারকারীদের তাদের ইচ্ছানুযায়ী ফাইলগুলি সজ্জিত করতে দেয় এবং FAT ফাইল সিস্টেমটি নিম্ন-স্তরের শৈলীতে বাছাই করে।

Freecode.com এ একই সরঞ্জাম

আশা করি এটা সাহায্য করবে.

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