Stat

獲取 FOR 循環呈現的文件的時間戳

  • March 21, 2015

我的目標是找到 $ files on some $ 設備並將它們保存到一個或多個文件夾,這些文件夾的名稱與每個文件的時間戳相對應。要獲得我想使用 stat 的時間戳。

與 echo “$files” 相比,stat 不會單獨處理每個文件。相反,當我使用“”時,它似乎一次處理所有文件。

您對如何改進報價有任何建議或任何其他關於如何使 stat 能夠做我想要做的事情的提示?非常感謝您的幫助。

#!/bin/bash
for devices in "$(ls /media/*/)";
 do
   for files in "$(find /media/*/$devices -iname *.jpg)";
     do
       echo "$files"   # prints all files in separate lines
       stat "$files"   # seems to process all files at once
       stat $files     # splits file paths at spaces
     done
 done

問題不在於循環stat中的源數據,而在於源數據;for因為您已將其全部括在引號中,所以它成為一個長的單一實體。

要解決此問題,請刪除它周圍的引號,因此:

for files in $(find /media/*/$devices -iname "*.jpg");

只要文件或路徑都沒有空格,它就可以工作。但是有一個更優雅的解決方案,它適用於空格甚至奇怪的文件名(例如包含引號或換行符的文件名):

while IFS= read -r -d '' file; do
   # operations on each "$file" here
done < <(find /media/*/$devices -type f -iname *.jpg -print0)

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