bash 遍历两个目录
bash loop through two Directories
我尝试遍历两个目录并使用此脚本回显具有给定扩展名的所有文件:
#!/bin/bash
FOLDERS=/sdd/DATA/ /sdc/storage/
for d in $FOLDERS; do
echo "$d"
FILES=$d*.txt
for f in $FILES; do
echo "$f"
done
done
但我无法使用此脚本!
我得到 bash: sdc/storage/ 是一个目录
正确执行此操作如下所示:
#!/bin/bash
folders=( /sdd/DATA/ /sdc/storage/ )
for d in "${folders[@]}"; do
echo "$d"
files=( "$d"*.txt )
printf '%s\n' "${files[@]}" # print the files array, one per line
done
注:
array=( "first item" "second item" )
定义了一个包含两项的数组; "${array[@]}"
扩展到那些项目。
- 当扩展一个元素时,我们想要引用 shell 不应该 字符串拆分或 glob 扩展的部分,但不引用任何 glob 模式;因此,
"$d"*.txt
.
- 我们对用户定义的变量使用小写名称。这是根据 POSIX-defined recommendation,它指定用于对操作系统和 shell 有意义的变量的全大写名称,而所有其他名称保留供应用程序使用。
我尝试遍历两个目录并使用此脚本回显具有给定扩展名的所有文件:
#!/bin/bash
FOLDERS=/sdd/DATA/ /sdc/storage/
for d in $FOLDERS; do
echo "$d"
FILES=$d*.txt
for f in $FILES; do
echo "$f"
done
done
但我无法使用此脚本! 我得到 bash: sdc/storage/ 是一个目录
正确执行此操作如下所示:
#!/bin/bash
folders=( /sdd/DATA/ /sdc/storage/ )
for d in "${folders[@]}"; do
echo "$d"
files=( "$d"*.txt )
printf '%s\n' "${files[@]}" # print the files array, one per line
done
注:
array=( "first item" "second item" )
定义了一个包含两项的数组;"${array[@]}"
扩展到那些项目。- 当扩展一个元素时,我们想要引用 shell 不应该 字符串拆分或 glob 扩展的部分,但不引用任何 glob 模式;因此,
"$d"*.txt
. - 我们对用户定义的变量使用小写名称。这是根据 POSIX-defined recommendation,它指定用于对操作系统和 shell 有意义的变量的全大写名称,而所有其他名称保留供应用程序使用。