在for循环中查找命令

问题描述

我有bash脚本,目的是查找所有早于“ X”分钟的文件,并将输出重定向文件中。逻辑是有一个for循环,我想对所有文件进行查找,但是由于某种原因,它只打印并重定向输出文件中的文件,只是最后一个目录中的文件(TESTS [3] =“ / tmp / test / ”)。所以我希望目录中的所有文件重定向到那里。谢谢您的帮助:D

这是嘘:

#!/bin/bash
set -x






if [ ! -d $TEST ]
then
    echo "The directory does not exist (${TEST})!"
    echo "Aborted."
    exit 1
fi


TESTS[0]="/tmp/t1/"
TESTS[1]="/tmp/t2/"
TESTS[2]="/tmp/t3/"
TESTS[3]="/tmp/test/"

for TEST in "${TESTS[@]}"
do
find $TEST -type f -mmin +1 -exec ls -ltrah {}  \; > /root/alex/out
done

解决方法

您每次在循环内使用>将最新命令的输出重定向到文件,覆盖文件的先前内容。如果您使用>>,则每次都会以“附加”模式打开文件,但是...

解决问题的更好方法是将重定向移到循环外:

done > /root/alex/out

一种比这更好的方法是完全避免循环并仅使用:

find "${TESTS[@]}" -type f -mmin +1 -exec ls -ltrah {}  \; > /root/alex/out

由于find接受多个路径。

我认为您可以使用{} +而不是{} \;来调用处理所有参数所需的最少数量ls,并且您可能想在{中检查-printf {1}},因为您可能无需使用man find就可以使用内置格式说明符获得类似的输出。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...