Files

查找+粘貼+查找:對每個文件進行多次查詢

  • September 21, 2018

我正在嘗試為目錄中的每個文件獲取至少包含以下欄位的行(順序無關緊要,儘管那個更可取):

- 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

請注意額外的引用以獲取單個\ninto printf.

在 ,之外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 類型的輸出,但如果您的文件名可能包含逗號,您應該引用文件名。如果您將文件大小從簡單的字節字元串轉換為在數千個位置帶有逗號的文件大小,則同上。

引用自:https://unix.stackexchange.com/questions/470594