CSVファイルにファイル出力がありますが、日時別に並べ替えたいのですが、日時は以下のように表示され、時間と年は異なる順番で表示されます。
ファイルのリストを生成するには、次のコマンドを使用します。
find /Volumes/myVolume -type f -exec ls -1 -aldT {} \; |cut -c35-300 |sort -r -k5,5 -s |sort -k3,3 -s
1579099156 6 Apr 09:33:03 2023 /Volumes/myvolume/myfile
私のsort
コマンドはうまくいきますが、2番目のソートフィールドは「月」なのでアルファ順にソートしますが、私はそれを月として処理して月順にソートしたいと思います。 (例:1月、2月、3月など)。
ファイルリストの生成方法を変更せずにこれを達成する方法はありますか?
必要に応じてファイルのリストを変更できます。これは、他のタスクを実行するために解析できるファイル出力の再帰的なリストを生成するのに役立ちます。
フィールドの順序を調整できますが、すべてのフィールドが表示され、ファイル名が常に最後に表示されるはずです。
ベストアンサー1
zsh
OSXでは、glob修飾子を使用して変更時間ごとに一致するファイル名をソートするためのアクセス権が必要です。
/Volumes/myVolume/**/*(.DOm)
zstat
その後、次に説明するのと同様の方法でそのモジュールを使用できます。各ファイルのサイズとともにテキストファイルのリストに保存されます。サイズと実行時間を取得して印刷します。だから(方法を直接調整してください)
zmodload -F zsh/stat b:zstat
zstat -F '%d %b %T %Y' -A data -n /Volumes/myVolume/**/*(.DOm)
for name _ _ _ _ _ _ _ size _ mtime _ _ _ in $data; do
printf '%s\t%s\t%s\n' $size $mtime $name
done
または、明示的なループを使用してください(読みやすさが高い可能性があります)。
zmodload -F zsh/stat b:zstat
for f in /Volumes/myVolume/**/*(.NDOm); do
zstat -LF '%d %b %T %Y' -H s -- $f &&
printf '%s\t%s\t%s\n' $s[size] $s[mtime] $f
done