選択したファイルのディレクトリ情報からCSVを生成する

選択したファイルのディレクトリ情報からCSVを生成する

私はMacを使用していますが、このコマンドラインの問題により問題が発生しています。少なくとも最も簡単な方法はCLを使用することを前提としています。

指定された拡張子セット(たとえば、.mov、.mkv、.flvなどのビデオなど)のファイルに対してディレクトリツリーを繰り返し検索したいと思います。次に、各行にファイル名(削除パス)と作成日を含むCSV形式を出力したいと思います。

これは、コマンドラインまたはできるだけ単純なスクリプトで行う必要があるように見えますが、混乱しています。

答え1

MacOSはファイルの作成時期を追跡しますが、それを使用できるツールは多くなく、通常は意味がありません。ほとんどの場合、修正時間はうまく機能し、より多くのツールでサポートされています。

私のすべての解決策は、ファイル名に文字,"改行文字が含まれていないと仮定しています。それ以外の場合、出力はあいまいになります。 CSVファイルでこれらの文字を表すには特別な注意が必要です。ファイル名にカンマを含めることができる場合は、ファイル名の周りに二重引用符を入れるか、;列区切り文字などの他の文字を使用する必要があります。

zsh、修正時間

必要なファイルを列挙するには、次のようにします。グローバルオペレータ **サブディレクトリに移動し、(…|…)複数の拡張子を一致させます。使用グローバル予選 .一致を通常のファイルに制限し、一致がNなくてもエラーを発生させず、オプションでDドットファイルを含めます。または以下を使用してください。ワイルドカードフラグ i拡張子を大文字と小文字を区別せずに一致させます。

必要なデータを取得するには、次のようにします。zstatモジュールで作られていますzsh/stat。ディレクトリ部分なしでファイル名を印刷するには、次のようにします。履歴修飾子 tに固定パラメータ拡張

zmodload -F zsh/stat b:zstat
for x in **/*.(#i)(mov|mkv|flv)(.N); do
  TZ=UTC zstat -A a -F '%Y-%m-%d %H:%M:%S' +mtime -- $x;
  print -lr -- "$x:t,$a[1]";
done

zsh + /usr/bin/stat、作成時間

stat代わりにシステムユーティリティを使用すると、zstatファイルの作成時間を一覧表示できます。ファイル名からディレクトリ部分を削除するオプションがないため、statまずファイルを含むディレクトリに切り替えます。

for x in **/*.(#i)(mov|mkv|flv)(.N); do
  (cd $x:h && TZ=UTC stat -t '%Y-%m-%d %H:%M:%S' -f %N,%SB -- $x:t)
done

GNU検索、修正時間

GNUでは、find次のことができます。-printf基本的な目的の形式で出力をレンダリングします。使用%fディレクトリ部分がないファイル名の場合%Tそれから時間形式修正時間です。複数の拡張子を一致させるには-regexそして-regextype posix-extendedとても便利です。

TZ=UTC gfind -type f -regextype posix-extended -regex '.*\.(mov|mkv|flv)' \
      -printf '%f,%TY-%Tm-%Td %TH:%TM:%TS\n'

/usr/bin/find+ /usr/bin/stat、生成時間

システムでは、find検索部分はデフォルトオプション-Eではなくオプションを使用するという点でGNU findに似ています-regextype posix-extendedが、リストを計算するにはシェルコードを使用する必要があります。これにより、-execdirファイルのデフォルト名を便利に取得できます。

TZ=UTC find -E . -regex '.*\.(mov|mkv|flv)' -type f \
     -execdir sh -c 'for x do stat -t "%Y-%m-%d %H:%M:%S" -f %N,%SB -- "$x"; done' sh {} \;

関連情報