递归调用程序以在每个子目录上运行

时间:2016-10-15 11:50:08

标签: linux bash recursion directory-structure

我有一个类似

的程序
#!bin/bash

cd $1

tree $1

我跑的地方:

myprogram.sh subdir1

其中subdir1dir的子目录,但我在subdir1, subdir2, subdir3... subdirN内有dir

如何告诉我的程序在dir的每个子目录上运行?显然,我的程序不只是运行tree,而只是表示我通过命令行传递一个子目录,我的程序使用子目录名称来处理一大堆进程。

由于

1 个答案:

答案 0 :(得分:1)

使用find。例如,find $1 -type d将返回$1下所有目录的列表,并根据需要进行递归。

您可以在脚本之前使用xargsexec

find DIR -type d -print0 | xargs -0 -n1 thescript.sh

find DIR -type d -exec thescript.sh {} \;

以上两种方法对于奇怪命名的目录都是安全的。

如果您想在脚本中使用find且没有目录名称包含换行符,请尝试:

#!/bin/bash
find "$1" -type d| IFS='' while read d; do
   pushd "$d" #like cd, but remembers where you came from

   tree "$d"; #<-- your code here

   popd #go back to starting point
done

如果您只想要起点的直接子目录,请尝试在参数列表中将-depth 1添加到上述示例中的find