配列に保存されているファイルパス名のリストがあるとします。
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に対してのみ異なる配列を作成し、
sort
basenames配列に適用します。
ありがとうございます。
ベストアンサー1
sort
GNU coreutils は、カスタムフィールド区切り記号とキーを受け入れます。/
フルパスの代わりにデフォルト名でソートするには、フィールド区切り記号に設定し、2番目のフィールドでソートします。
printf "%s\n" "${filearray[@]}" | sort -t/ -k2
生産する
dir2/0003.pdf
dir1/0010.pdf
dir3/0040.pdf