我需要递归地遍历一个目录,并删除所有扩展名为.pdf和.doc的文件。我设法递归地循环通过一个目录,但不设法过滤与上述文件扩展名的文件。
我目前的代码
#/bin/sh
SEARCH_FOLDER="/tmp/*"
for f in $SEARCH_FOLDER
do
if [ -d "$f" ]
then
for ff in $f/*
do
echo "Processing $ff"
done
else
echo "Processing file $f"
fi
done
我需要帮助来完成代码,因为我没有得到任何地方。
没有找到:
for f in /tmp/* tmp/**/* ; do
...
done;
“/tmp/*”为目录下的文件,“/tmp/**/*”为子目录下的文件。有可能您必须启用globstar选项(shop -s globstar)。
所以对于这个问题,代码应该是这样的:
shopt -s globstar
for f in /tmp/*.pdf /tmp/*.doc tmp/**/*.pdf tmp/**/*.doc ; do
rm "$f"
done
请注意,这要求bash≥4.0(或zsh不带shopt -s globstar,或ksh带set -o globstar而不是shopt -s globstar)。此外,在bash <4.3中,这将遍历到目录和目录的符号链接,这通常是不可取的。
没有找到:
for f in /tmp/* tmp/**/* ; do
...
done;
“/tmp/*”为目录下的文件,“/tmp/**/*”为子目录下的文件。有可能您必须启用globstar选项(shop -s globstar)。
所以对于这个问题,代码应该是这样的:
shopt -s globstar
for f in /tmp/*.pdf /tmp/*.doc tmp/**/*.pdf tmp/**/*.doc ; do
rm "$f"
done
请注意,这要求bash≥4.0(或zsh不带shopt -s globstar,或ksh带set -o globstar而不是shopt -s globstar)。此外,在bash <4.3中,这将遍历到目录和目录的符号链接,这通常是不可取的。