我有一个bash脚本,在给定目标目录的情况下搜索所有子目录(在所有级别):
#! /bin/bash
DIRECTORIES="/home/me/target_dir_1"
for curr in $DIRECTORIES
do
...
现在我希望脚本能够搜索多个目标目录,例如target_dir_1, target_dir_2, target_dir_3
。我该如何修改脚本来执行此操作?
答案 0 :(得分:3)
使用find代替。
find /home/me/target_dir_1 -type d
你可以把它放在for循环中:
for d in target_dir_1 target_dir_2
do
find /home/me/"$d" -type d
done
如果始终为/home/me
,并且您想要搜索其下的所有目录,请执行以下操作:
find /home/me -type d
答案 1 :(得分:3)
#!/bin/bash
GIVEN_DIR=$1 ## Or you could just set the value here instead of using $1.
while read -r DIR; do
echo "$DIR" ## do something with subdirectory.
done < <(exec find "$GIVEN_DIR" -type d -mindepth 1)
使用以下命令运行:
bash script.sh dir
请注意,分词是一个坏主意,所以不要这样做:
IFS=$'\n'
for DIR in $(find "$GIVEN_DIR" -type d -mindepth 1); do
echo "$DIR" ## do something with subdirectory.
done
其他表单都没有,例如当-print0
用于find
时,如果您仍然使用while
就可以了:
while read -r DIR -d $'\0'; do
echo "$DIR" ## do something with subdirectory.
done < <(exec find "$GIVEN_DIR" -type d -mindepth 1 -print0)
最后,您可以在阵列上录制这些内容:
readarray -t SUBDIRS < <(exec find "$GIVEN_DIR" -type d -mindepth 1)
for DIR in "${SUBDIRS[@]}"; do
echo "$DIR" ## do something with subdirectory.
done
答案 2 :(得分:2)
说:
for i in /home/me/target_dir_{1..5}; do
echo $i;
done
这将导致:
/home/me/target_dir_1
/home/me/target_dir_2
/home/me/target_dir_3
/home/me/target_dir_4
/home/me/target_dir_5
或者,您可以将变量指定为数组并循环遍历它:
DIRECTORIES=( /home/me/target_dir_1 /home/me/target_dir_2 /home/me/target_dir_3 )
for i in ${DIRECTORIES[@]}; do echo $i ; done
会导致
/home/me/target_dir_1
/home/me/target_dir_2
/home/me/target_dir_3