我想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