Bash - 循环指定文件夹以查找空文件

Bash - 循环指定文件夹以查找空文件

我想loop遍历脚本中指定的一组文件夹并打印所有空文件。我使用这个脚本:

array=("folderA" "folderX")    

for file in ./"${array[@]}"/*; do

  if [ -s "${file}" ]; then

    echo "$file"

  fi
done

这不起作用,我只获得数组中指定的第一个文件夹的输出,如下所示:

./folderX
./folderA/emty_file1
./folderA/emty_file7
./folderA/emty_file12
./folderA/emty_file24

如何使脚本也检测数组中指定的其他目录中的空文件?

答案1

无需迭代,

array=("folderA" "folderX")
find "${array[@]}" -maxdepth 1 -type f -empty

答案2

另一种简单的解决方案:

for i in "folderA" "folderX"
  do find "$i" -type f -empty
done

如果脚本从其他位置启动,请务必包含带有文件夹名称的路径,例如“/usr/local”。

编辑:此外,正如正确指出的那样,如果您想限制搜索范围,请相应地使用 max深度:

for i in "folderA" "folderX"
  do find "$i" -maxdepth 1 -type f -empty
done

答案3

./"${array[@]}"/*扩展到:

./folderA folderB/*

因为./转到第一个元素的开头,而/*转到第二个元素的结尾。

你需要做的是添加 /* 数组的每个元素添加后缀:

"${array[@]/%//*}"

您可以搜索 ${var/%Pattern/Replacement}这里了解更多信息并了解如何在开头添加“./”(尽管对于您的特定情况,上述替换就足够了)。

答案4

也许这会帮助您获得预期的结果

#!/bin/bash

arr=("folderA" "folderX")    # Storing folder names to an array 
arr_count=${#arr[@]}     # Stroing count of element's in an array 
echo "Count of array :  $arr_count" # Printing the count of elements present in an array 

for ((  i=0 ; i<2 ; i++ ))
{
   find "$(pwd)"/"${arr[$i]}" -empty -type f 
}

如果你想删除那些空文件只需将其添加-delete到上面的 find 命令中

find "$(pwd)"/"${arr[$i]}" -empty -type f -delete

相关内容