1
find_date=$(stat -c %y $files | awk '{print $1}')
#Grabbing each file from the array
for file in "${files[@]}"; do
# We get the date part
file_date=''

#Reading the date and breaking by the - mark
IFS="-" read -ra parts <<< "$file"


unset file_date
find_date=$(stat -c %y $files | awk '{print $1}')
echo "File Date: " $find_date



for t in "${find_date[@]}"; do
#Putting the date into the array
if [[ $t == [0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] ]]; then
    file_date=$t
    break
fi
done
echo "T: " $t

所以一切正常,但它应该移动到下一个文件的 for 循环。当我运行我的脚本时,我注意到 STAT 命令的所有错误都不起作用,因为在它执行第一个文件之后它仍在尝试 STAT 该文件而不是列表中的下一个

4

2 回答 2

1

重置 file_date 使其不会“记住”前一个循环的结果,即:

unset file_date
for t in "${find_date[@]}"; do
   #Putting the date into the array
    if [[ $t == [0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] ]]; then
        file_date=$t
        break
    fi
done
于 2013-10-10T10:19:43.983 回答
0

这一行:

find_date=$(stat -c %y $files | awk '{print $1}')

files是数组,因此$files每次循环时都会扩展到该数组的第一个元素。您想file使用用于迭代数组的变量。

for file in "${files[@]}"; do
    ...
    find_date=$(stat -c %y "$file" | awk '{print $1}')
    #                      ^^^^^^^
    ...
done
于 2013-10-10T12:46:03.080 回答