我希望我的 shell 脚本能够访问主目录中的所有子目录。在目录中执行某些操作,将输出发送到假脱机文件,然后转到下一个目录。考虑 Main Dir = /tmp Sub Dir = ABCD (四个子目录)
答案1
使用for
循环:
for d in $(find /path/to/dir -maxdepth 1 -type d)
do
#Do something, the directory is accessible with $d:
echo $d
done >output_file
它仅搜索该目录的子目录/path/to/dir
。请注意,如果目录名称包含空格或特殊字符,上面的简单示例将会失败。更安全的方法是:
find /tmp -maxdepth 1 -type d -print0 |
while IFS= read -rd '' dir; do echo "$dir"; done
或者简单地说bash
:
for d in /path/to/dir/*; do
if [ -d "$d" ]; then
echo "$d"
fi
done
(请注意,与find
此相反,我们还考虑目录的符号链接并排除隐藏的符号链接)
答案2
我是一个完全的bash
新手,但却是一个 UN*X 的老手。尽管毫无疑问这可以在 Bash shell 脚本中完成,但在过去我们常常find [-maxdepth <levels>] <start-dir> -exec <command> ;
这样做。你可以做一个man find
并尝试一下,也许直到有人告诉你如何做bash
!
答案3
看起来您想要每个子目录下的文件名;不够ls -l | awk
强大,如果这些文件名包含空格和/或换行符怎么办?即使对于那些碰巧不适合他们的 s ,以下内容find
也适用:find
-maxdepth
find . ! -name . -type d -prune -exec sh -c '
cd "$1" && \
find "." ! -name . -prune -type f
' {} {} \;
答案4
我得到了解决方案。下面的 find 命令满足我的要求。
find . -maxdepth 1 -type d \( ! -name . \) -exec bash -c "cd '{}' && ls -l |awk '{ print $9 }' |grep `date +"%m%d%Y"`|xargs echo" \;