次のスクリプトは、ユーザー入力(マウントされたmacOSボリュームへのパス、たとえば/ Volumes / Macintosh \ HD /)を受け入れます。
#!/bin/bash
# Author: Swasti Bhushan Deb
# macOS 10.13.3
# kMDItemWhereFroms.sh
read -e -p "Enter the full path to the Mounted Volume (e.g /Volume /Macintosh HD): " path
var=$(mdfind -name 'kMDItemWhereFroms="*"' -onlyin "$path")
echo "$var"
出力:
/Users/swastibhushandeb/Documents/encase_examiner_v710_release_notes.pdf
/Users/swastibhushandeb/Desktop/AirPrint Forensics.pdf
次のステップで、各出力でスクリプトを実行したいmdls
(ファイルに関連するすべてのメタデータ属性の値を印刷)。kMDItemWhereFroms.sh、または以下を使用して手動で実行できます。
mdls /Users/swastibhushandeb/Documents/encase_examiner_v710_release_notes.pdf
しかし、これらの処理を自動化するためにどのようなbashコーディング戦略/オプションを使用できますか?各列にmdls
コマンド出力のフィールドが含まれるように出力をcsvファイルとして指定するにはどうすればよいですか?
答え1
mdfind
'-0
オプションを使用すると、xargs
見つかった名前がNUL文字で終わるようにすることができます(したがって、スペース/タブ/改行などを心配する必要はありません)。
read -e -p 'Path? ' path
mdfind -0 -name 'kMDItemWhereFroms="*"' -onlyin "$path" | xargs -0 mdls
出力だけでなく、パス/ファイル名も表示する方がmdls
複雑になります。
mdfind -0 -name 'kMDItemWhereFroms="*"' -onlyin "$path" | \
xargs -0 -n 1 sh -c 'echo "$1" && mdls "$1"' _
(_
最後は単に構文上の砂糖であり、sh
最初の引数(通常はコマンド名)をに割り当てます$0
。)