MAC OSX / Bashの問題 - 日付で文字列を並べ替える

MAC OSX / Bashの問題 - 日付で文字列を並べ替える

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

zshOSXでは、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

おすすめ記事