何千もの画像を含むフォルダがあります。何千もの画像の中で、「最終生成」属性と「最終修正」属性がまったく同じすべての画像をまとめたいと思います。 (つまり、名前を変更していないすべての画像を分離したい)
端末でこれを行う方法はありますか?
接続する2つのコマンドは次のとおりです。 LS-TU作成日ごとにファイルを一覧表示します。 (私はMacを使用しています) ls-lt変更日別にファイルを一覧表示
そう思います。 「作成日=変更日のリストファイル」
答え1
このstat
コマンドを使用してこれを実行できます。以下は、ファイル名を印刷してスペースを含めることができる簡単なスクリプトです。
#!/bin/sh
find $* -exec stat -f '%m %B %N' {} \; | \
awk '$1 == $2 { \
s=length($1)+length($2)+3;
$0 = substr($0,s);
print $0;
}'
そして%m
それぞれ%B
修正済みそして生まれる回(これが要求されたようです)。スクリプトはこれらの数字を10進数で印刷し、awk
その数字を渡し、その数字が同じ行のみを印刷します。ファイル名にスペースを含めることができるため、スクリプトの残りは入力からタイムスタンプ値を削除し、行の残りの部分を印刷します。
追加資料:
答え2
私はそれが退屈だと感じたので、これらのスクリプトも使用しているので、Thomas Dickeyのスクリプトを大胆な方法ではなく小さな方法で変更しましたが、たとえばすべての種類のファイル名(ファイル名に改行を含むファイルも含む)を処理できるようにするしました。 )ファイル名の間の区切り文字を簡単に変更できます(たとえば、に渡すようにORS
設定するだけです)。"\0"
xargs -z …
#!/bin/sh
find "${1-.}" -type f -exec stat --printf '%n\0%Y %W\0' -- {} \; | \
awk 'BEGIN {
RS = "\0";
FS = " ";
ORS = "\n";
} {
if (NR % 2) {
f = $0;
} else if ($1 == $2) {
print f;
}
}'
たとえば--printf
。