Files
查找+粘貼+查找:對每個文件進行多次查詢
我正在嘗試為目錄中的每個文件獲取至少包含以下欄位的行(順序無關緊要,儘管那個更可取):
- Image resolution, in case it is an image. If not, just blank. - Modification date - Human readable file size - Filename
目錄中的文件是 jpg 圖像,其餘隻是純文字文件。我試過類似的東西:
find . -type f -exec paste `identify {} 2> /dev/null` `ls -goh {}` \;
ls
告訴我cannot access {}
。2> /dev/null
裡面的部分identify
用於跳過非 jpg 文件的錯誤消息。我也嘗試過
xargs
等的不同組合$()
,但還沒有找到方法。有什麼建議嗎?
這看起來是嵌入式
-exec
腳本的一個很好的用途:find . -name \*.png -exec sh -c 'printf '%s,%s\\\\n' "$(identify -format '%hx%w' "$1")" "$(stat -c %y,%s,%n "$1")";' bash {} \; > out.csv
範例輸出為:
32x32,2018-09-21 15:04:33.216773000 -0400,192,./favicon.png 20x20,2018-09-21 15:04:33.225771000 -0400,1202,./delete.png
為了便於閱讀,該腳本是:
find . -name \*.png -exec sh -c 'printf '%s,%s\\\\n' "$(identify -format '%hx%w' "$1")" "$(stat -c %y,%s,%n "$1")";' bash {} \; > out.csv
請注意額外的引用以獲取單個
\n
intoprintf
.在 ,之外
find
獲取目前目錄中文件的此類輸出:for f in ./*.png do printf '%s,%s\n' "$(identify -format '%hx%w' "$f")" "$(stat -c %y,%s,%n "$f")" done
範例輸出為:
20x20,2018-09-21 15:04:33.225771000 -0400,1202,./delete.png 32x32,2018-09-21 15:04:33.216773000 -0400,192,./favicon.png
您可以根據需要更換零件或添加其他零件;對於第三個命令,只需添加另一個
%s
和引用的命令。我生成了一個簡單的 CSV 類型的輸出,但如果您的文件名可能包含逗號,您應該引用文件名。如果您將文件大小從簡單的字節字元串轉換為在數千個位置帶有逗號的文件大小,則同上。