查找命令不能仅在脚本中工作

时间:2015-05-12 00:12:25

标签: bash find

我有一个脚本,它搜索.txt文件的特定位置,并将结果输出到stdout,并使用tee命令输出到文件。至少它应该是。然而,我有一些奇怪的问题。这是代码:

echo -e "${HIGHLIGHT}Sensitive files:${OFF}"
echo "## Sensitive files:" >> $ofile
for file in $(cat $1); do ls -lh $file 2>/dev/null; done | tee -a $ofile
echo " " | tee -a $ofile
echo -e "${HIGHLIGHT}Suids:${OFF}"
echo "## Suids:" >> $ofile
find / -type f \( -perm -04000 -o -perm -02000 \) -exec ls -Alh {} \; 2>/dev/null | tee -a $ofile
echo " " | tee -a $ofile
echo -e "${HIGHLIGHT}Owned by root only:${OFF}"
echo "## Owned by root only:" >> $ofile
find / -type f -user root \( -perm -04000 -o -perm -02000 \) -exec ls -lg {} \; 2>/dev/null | tee -a $ofile
echo " " | tee -a $ofile

# Text files
echo -e "${HIGHLIGHT}Text files:${OFF}"
echo "## Text files:" >> $ofile
find /etc -type f -name *.txt -exec ls -lh {} \; 2>/dev/null | tee -a $ofile
find /home -type f -name *.txt -exec ls -lh {} \; 2>/dev/null | tee -a $ofile
find /root -type f -name *.txt -exec ls -lh {} \; 2>/dev/null | tee -a $ofile

奇怪的是,除了搜索底部的.txt文件之外,所有命令都运行正常。这些命令都不在脚本中工作,但如果我将它们复制并粘贴到终端并运行与脚本中的完全相同,它们就可以正常工作。这怎么可能呢?

1 个答案:

答案 0 :(得分:3)

您需要引用或转义*模式中的-name,否则shell会尝试展开它并在命令行中使用展开的表单。

find /etc -type f -name '*.txt' -exec ls -lh {} \; 2>/dev/null | tee -a $ofile

其他类似的将会有效