ディレクトリ内のファイル `03.mp3 01.mp3 02.mp3`(` ls -f`)を物理的に並べ替える方法は?


11

ファイルをUSBスティックにコピーして車のmp3プレーヤーで聴く場合、ファイルの物理的な順序が重要です。私の音楽アルバムフォルダのほとんどは、ソートされていない、などがls -f生成されることがあります。
03.song3.mp3
01.song1.mp3
02.song2.mp3

そのフォルダをUSBスティックにコピーする、ファイルがこの順序でコピーされます。私の車のmp3プレーヤーはファイルをソートされていない順序で表示しますが、これは私が望むものではありません。その後USBスティック上のファイルを並べ替えることができます(「フォルダーを並べ替える方法は?( `ls -U`で表示される)」を参照)が、そのディレクトリ内でハードドライブ(ext4 )?それを行う方法はありますか?

(これに失敗すると、findコマンドを記述して、ファイルを取得し、並べ替えてから、それらを順番にコピーする方法があるかもしれません。)何か提案はありますか?


また、あなたはファイルを並べ替えることができた後、 mp3プレーヤーにコピーする:superuser.com/questions/368623/...
eswald

回答:


5

ext4でこれを実行できる可能性は低いです。ディレクトリ内のファイルの線形テーブルを使用するFAT(32)とは異なり、最新のファイルシステムは、Bツリー(NTFS、XFS)またはハッシュ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フォルダーと言って、元に戻すことはできますが、順序を指示することはできますか?(フォルダーの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 2012年

cp dir/* otherdir/非常に簡単に見えますが、元の順序を使用しています。そこでソートを実装できますか?
ajo

2
@ajo:シェルは、起動する前にファイル名をソートすることになっていますcpecho dir/*彼らが何に拡張するか見てみてください。ただし、FATメモリースティックにコピーする場合にのみ問題になります。それはなりません ext4のにコピーするときに何も変更します。
user1686 2012年

1
これは単一のディレクトリで問題ありませんか?find SRC_DIR -iname '*mp3' -print0 | sort -z | xargs -0 -I {} cp {} DEST_DIR
アホ

2

他にも同様の問題があるようです。

ユーザーが希望どおりにファイルを配置し、FATファイルシステムの低レベルスタイルを並べ替えることができるツール

freecode.comの同じツール

それが役に立てば幸い。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.