如何在 linux 终端中使用 for-loop & find & if-statement 获取子目录
how to get a sub-directory with for-loop & find & if-statement in linux terminal
给定以下结构:
.
├── a1
│ ├── q
│ ├── w
│ └── e
├── a2
│ ├── q
│ ├── e
│ └── s
我想要一个嵌套的 for 循环并找到必须在 linux 中工作的 $ if 语句。
预期输出是检查子目录是否包含声明数组中的特定字符串后的结构。
我想要这样的代码:
declare -a folderlist=("a1", "a2")
declare -a checklist=("w", "s")
for folder in "${folderlist[@]}";
do
subfolders=$(ls ./$folder);
for subfolder in "${subfolders[@]}";
do
if [ $d == "w" -o $d == "s" ];
then echo ./$folder/$subfolder;
fi;
done;
done;
我想知道上面这部分:
do
if [ $d == "w" -o $d == "s" ];
then echo ./$folder/$subfolder;
fi;
done;
- 如何将 [ $d == "w" -o $d == "s" ] 部分更改为 if
[$d 在清单中] ?
预期输出:
./a1/w/
./a2/s/
为什么不全部使用 find
?
# Test directory
$ find .
.
./a1
./a1/e
./a1/q
./a1/w
./a2
./a2/e
./a2/q
./a2/s
# Find sub-directories called `s` and `w`
$ find . -mindepth 2 -type d -name w -or -name s
./a1/w
./a2/s
多级查找
$ find . -mindepth 1 -maxdepth 1 -type d \( -name a1 -o -name a2 \) -print0 |
xargs -0 -I{} find {} -type d -name w -o -name s
./a1/w
./a2/s
给定以下结构:
.
├── a1
│ ├── q
│ ├── w
│ └── e
├── a2
│ ├── q
│ ├── e
│ └── s
我想要一个嵌套的 for 循环并找到必须在 linux 中工作的 $ if 语句。
预期输出是检查子目录是否包含声明数组中的特定字符串后的结构。
我想要这样的代码:
declare -a folderlist=("a1", "a2")
declare -a checklist=("w", "s")
for folder in "${folderlist[@]}";
do
subfolders=$(ls ./$folder);
for subfolder in "${subfolders[@]}";
do
if [ $d == "w" -o $d == "s" ];
then echo ./$folder/$subfolder;
fi;
done;
done;
我想知道上面这部分:
do
if [ $d == "w" -o $d == "s" ];
then echo ./$folder/$subfolder;
fi;
done;
- 如何将 [ $d == "w" -o $d == "s" ] 部分更改为 if [$d 在清单中] ?
预期输出:
./a1/w/
./a2/s/
为什么不全部使用 find
?
# Test directory
$ find .
.
./a1
./a1/e
./a1/q
./a1/w
./a2
./a2/e
./a2/q
./a2/s
# Find sub-directories called `s` and `w`
$ find . -mindepth 2 -type d -name w -or -name s
./a1/w
./a2/s
多级查找
$ find . -mindepth 1 -maxdepth 1 -type d \( -name a1 -o -name a2 \) -print0 |
xargs -0 -I{} find {} -type d -name w -o -name s
./a1/w
./a2/s