私は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 {} \;