ベース名に基づいてファイルパス名の配列をソートします。

ベース名に基づいてファイルパス名の配列をソートします。

配列に保存されているファイルパス名のリストがあるとします。

filearray=("dir1/0010.pdf" "dir2/0003.pdf" "dir3/0040.pdf" ) 

ファイル名の基本名に基づいて配列の要素を数値順に並べ替えたいと思います。

sortedfilearray=("dir2/0003.pdf" "dir1/0010.pdf" "dir3/0040.pdf") 

どうすればいいですか?

デフォルトの名前部分でのみソートできます。

basenames=()
for file in "${filearray[@]}"
do
    filename=${file##*/}
    basenames+=(${filename%.*})
done
sortedbasenamearr=($(printf '%s\n' "${basenames[@]}" | sort -n))

考えています。

  • キーがデフォルト名で値がパス名である連想配列を生成するため、パス名へのアクセスは常にデフォルト名を介して行われます。
  • basenamesに対してのみ異なる配列を作成し、sortbasenames配列に適用します。

ありがとうございます。

ベストアンサー1

sortGNU coreutils は、カスタムフィールド区切り記号とキーを受け入れます。/フルパスの代わりにデフォルト名でソートするには、フィールド区切り記号に設定し、2番目のフィールドでソートします。

printf "%s\n" "${filearray[@]}" | sort -t/ -k2生産する

dir2/0003.pdf
dir1/0010.pdf
dir3/0040.pdf

おすすめ記事