किसी निर्देशिका में भौतिक रूप से 03 03.mp3 01.mp3 02.mp3` (`ls -f`) फ़ाइलों को कैसे पुनः व्यवस्थित करें?


11

फ़ाइलों का भौतिक क्रम तब मायने रखता है जब मैं उन्हें अपने यूएसबी स्टिक पर कॉपी करता हूं और कार एमपी 3 प्लेयर में सुनता हूं। अपने संगीत एल्बम फ़ोल्डरों के अधिकांश रहे हैं unsorted , जैसे ls -fउत्पादन हो सकता है:
03.song3.mp3
01.song1.mp3
02.song2.mp3

जब मैं उस फ़ोल्डर को अपने यूएसबी स्टिक पर कॉपी करता हूं, तो फाइलें उसी क्रम में कॉपी हो जाती हैं । मेरी कार एमपी प्लेयर फ़ाइलों को अनसेंडेड ऑर्डर में प्रदर्शित करती है, जो कि मैं नहीं चाहता। मैं बाद में USB स्टिक पर फ़ाइलों को फिर से दर्ज कर सकता हूं (देखें: फ़ोल्डरों को कैसे फिर से चालू करें? (जैसा कि `ls -U`) में दिखाया गया है ), लेकिन अगर मैं उस निर्देशिका में उन्हें अपनी हार्ड ड्राइव (ext4) में उन्हें फिर से नियंत्रित कर सकता हूं तो वह पूरी तरह से बच सकता है )? क्या ऐसा करने का कोई तरीका है?

(उसको विफल करते हुए, findकमांड लिखने का एक तरीका हो सकता है , जो फ़ाइलों को प्राप्त करता है, उन्हें सॉर्ट करता है, और फिर उन्हें क्रम में कॉपी करता है ?? कोई सुझाव?


वैकल्पिक रूप से, आप उन्हें एमपी 3 प्लेयर पर कॉपी करने के बाद फ़ाइलों को सॉर्ट कर सकते हैं : superuser.com/questions/368623/…
eswald

जवाबों:


5

यह संभावना नहीं है कि आप ext4 पर ऐसा कर पाएंगे। एफएटी (32) के विपरीत, जो एक निर्देशिका में फ़ाइलों की एक रैखिक तालिका का उपयोग करता था, आधुनिक फाइल सिस्टम जटिल संरचनाओं जैसे बी + ट्री (एनटीएफएस, एक्सएफएस) या हैशेड बी-ट्री (एक्सट्रीम / 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फ़ोल्डर कहा जाए, और फिर उन्हें वापस ले जाया जाए लेकिन आदेश को निर्देशित करें? (फ़ोल्डर्स के लिए एक GUI के भीतर से काम करने लगता है?)
ajo

1
@ajo: यदि फ़ाइल सिस्टम में dir_index सक्षम है, तो यह काम नहीं करेगा। आप चाहे जिस भी क्रम में फाइलें घुमाएँ / बनाएँ, उनके पास उसी तरह का क्रम होगा जब तक उनका नाम समान होगा। उदाहरण के लिए, कोशिश करें mkdir test1 test2; touch test1/{a,b,c,d} test2/{d,c,b,a}; ls -f test1 test2- फाइलों को उसी क्रम में ( a c b .. d .मेरे सिस्टम में) सॉर्ट किया जाएगा , भले ही वे रिवर्स में बनाए गए हों।
user1686

cp dir/* otherdir/बहुत आसान है, लेकिन मूल आदेश का उपयोग करता है। क्या मैं वहाँ छँटाई लागू कर सकता हूँ?
अंजो

2
@ajo: शेल को लॉन्च करने से पहले फ़ाइल नामों को क्रमबद्ध करना चाहिए cpecho dir/*यह देखने की कोशिश करें कि वे किस चीज का विस्तार करते हैं। लेकिन फिर से, यह केवल तभी मायने रखता है जब एफएटी मेमोरी स्टिक की नकल करता है; यह ext4 की नकल करते समय कुछ भी नहीं बदलेगा।
user1686

1
क्या यह एकल निर्देशिका के लिए ठीक है? find SRC_DIR -iname '*mp3' -print0 | sort -z | xargs -0 -I {} cp {} DEST_DIR
अंजो

2

लगता है कि अन्य लोगों के समान समस्याएं हैं

उपकरण जो उपयोगकर्ताओं को उनकी इच्छा के अनुसार फाइलों को व्यवस्थित करने और FAT फाइल सिस्टम को निम्न-स्तरीय शैली में क्रमबद्ध करने देता है।

Freecode.com पर समान टूल

आशा है ये मदद करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.