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 有意义的变量的全大写名称,而所有其他名称保留供应用程序使用。