ファイルの詳細(サイズ、作成日、変更日、最後に開いた日付など)を含むディレクトリとすべてのサブディレクトリの内容を一覧表示します。

ファイルの詳細(サイズ、作成日、変更日、最後に開いた日付など)を含むディレクトリとすべてのサブディレクトリの内容を一覧表示します。

まず、事前に謝罪する必要があります。 Mac端末に関して私が何をしているのかわかりません...

ディレクトリ/フォルダ内のすべてのファイルのインベントリを実行する必要があります。複数のサブディレクトリ/フォルダがあり、サブディレクトリ/フォルダなどもあります。

以下を含む各ファイルに対して1行を取得できるようにしたい。

  1. DirectoryName1\DirectoryName2\DirectoryName3 などのパスです。
  2. 拡張子を含むファイル名(例:.docx、.xlsxなど)
  3. 作成日(日/月/年)
  4. 最終修正日(日/月/年)
  5. ファイルサイズ(KB)

その後、結果をコピーしてスプレッドシートに貼り付け、スプレッドシートからインポートできます。

私はlsコマンドとfindコマンドを試しましたが、それぞれ必要なものの一部を提供しますが、両方の出力を提供しません(多くの手動の組み合わせなしで)。各コマンドにprintfコマンドを使用してみましたが、エラーメッセージによれば何かが欠けていることは明らかです。

これを行う方法はありますか?

ティア、

トム

答え1

macOS または OSX のデフォルトシェルが何であるかはわかりませんが、statユーティリティを使用できるか(存在する必要がある)インストールできる場合は、次のことができます。

$ find . -exec stat -c "%n,%w,%y,%s" {} \;  # on Arch linux
$ find . -exec stat -t "%F %T" -f "%N,%B,%m,%z" {} \;  # on macOS, OSX

CSV出力の例:

./.bash_history,2020-07-05 19:27:36.691875334 +0200,2020-07-05 19:27:36.691875334 +0200,54669
./.gitignore_global,2018-03-03 14:22:52.298262296 +0100,2018-03-03 14:22:52.298262296 +0100,423
...

これが初めての場合は、次のように入力することをお勧めしますman findman stat1]ターミナルで探してください。以下は、表示される内容を簡単に見てみましょう。

  • .上記のコマンドを実行したときに存在していた現在の作業ディレクトリを指します。ナビゲーションするツリーを含むディレクトリ以外のディレクトリでコマンドを実行している場合は、そのディレクトリを完全修飾ディレクトリパスに変更できます。
  • 見つかったファイルごとに、-exec次の出力形式でcmdを実行(表示)します。stat

Arch Linuxでは:

  • %n完全修飾ファイル名(ファイルパス+ファイルデフォルト名)、
  • %w人間が読み取ることができるファイルYYYY-MM-DD HH:MM:SS +/-hhmm 作成+hhmm時間-hhmm。小数秒を含む、
  • %yファイルデータが最後に変更された人が読める時間で、以前と同じ形式です。
  • %s合計ファイルサイズ(バイト)。

macOSまたはOSXでは、stat実装はGNU中心のプラットフォームとは異なります。この答えを得るためにmacOSではフォーマットをテストできませんでしたが、原則として正しいオプションは次のとおりです。

  • %Nファイル名、
  • %Bファイルの作成時刻、日付、時刻の形式は上記の通り、数値のタイムゾーンは除外され、
  • %mファイルが最後に変更された時間です%B。形式は次のとおりです。
  • %z合計ファイルサイズ。

結果の後処理のためにこの出力を維持するには、次のようにcmdの出力リダイレクトを含めます。

$ find . -exec stat -t "%F %T" -f "%N,%B,%m,%z" {} \; > stat.out # on macOS or OSX

.csvファイルから直接CSV出力ファイルを開くことができますLibreOffice Calc。ただし、デフォルトのExcel形式で出力を生成するには、perlまたはを使用することをお勧めしますpython

stat.outcmd が再実行されるたびに、出力ファイルが再作成されます。これを防ぐには、毎回名前を変更してください。

関連情報