【发布时间】:2013-12-05 07:49:07
【问题描述】:
我想从 WHILE 内的 FOR 循环中获得正确的输出。 当我使用这样的命令时一切正常:
for i in `find ./ -name "*.processed" -mtime +0`; do echo "$i is COOL"; done;
Output:
1.processed is COOL
2.processed is COOL ...
但是,当我在 bash/shell 脚本中使用它时,找到将具有适当掩码的所有文件的列表放入变量中(不是一个一个)。注意,将“echo $i is COOL”重定向到“wc -l”会返回所有文件的数量,该死。请参阅以下内容: confif 文件的条目如:
/export/home/.../ProcessedDumps;*.processed
所有路径都是完整路径。
#!/bin/bash
CONF_FILE=$1
DAYS_OLD=0
counter=0
IFS=";"
if [ "$1" = "-h" -o "$1" = "-help" -o "$#" -ne "1" ]; then
echo "Just archive your files easy!"
echo "Usage: `basename $0` /path_to_conf/config.cfg" && echo "Exit!"
exit 1
fi
echo "#########################"
date '+Date: %Y.%m.%d %T'
echo
while read LOG_DIR MASK
do
cd $LOG_DIR
echo "Dir changed to `pwd`"
echo "Searching with mask \"$MASK\""
for i in `find . -name "$MASK"`
do
echo "$i is COOL"
echo "test"
done
done < $CONF_FILE
echo
echo "Total archived files: $counter"
echo
date '+Date: %Y.%m.%d %T'
Output:
1.processed
2.processed
...
n.processed is COOL
test
是 bash 提供了不同种类的嵌套循环(内部 FOR,外部 WHILE)。有什么想法吗?
【问题讨论】:
-
我认为嵌套循环没有任何问题。看起来
find的输出没有被拆分,所以你只是foring 在一件事上。IFS设置了吗? -
你试过
find . -name $MASK吗? -
当您执行
cd时,您给出的是绝对路径还是相对路径? -
请粘贴CONF_FILE的内容
-
我很困惑...
find ./ -name "*.processed -mtime +0"不应该是find ./ -name "*.processed" -mtime +0吗? (仅在文件名周围引用...)