我有一个看起来像这样的脚本:
function main() {
for source in "$@"; do
sort_imports "${source}"
done
}
main "$@"
现在,如果我传入./myFile.m文件,脚本将按预期工作。
我想将其更改为传入./myClassPackage并让它找到所有文件并在每个文件上调用sort_imports。
我试过了:
for source in $(find "$@"); do
sort_imports "${source}"
done
但是当我调用它时,我收到一个错误,我正在将它传递给目录。
答案 0 :(得分:3)
使用命令替换for
循环的输出由于分词而存在缺陷。一个真正坚如磐石的解决方案将使用空字节分隔符来正确处理名称中带有换行符的文件(这不常见但有效)。
假设您只想要常规文件(而不是目录),请尝试以下方法:
while IFS= read -r -d '' source; do
sort_imports "$source"
done < <(find "$@" -type f -print0)
-print0
选项导致find
用空字节分隔条目,而-d ''
的{{1}}选项允许这些用作记录分隔符。
答案 1 :(得分:2)
您应该将查找与find "$@" -type f -exec sort_imports "{}" \;
一起使用:
getData
有关详细信息,请参阅https://www.everythingcli.org/find-exec-vs-find-xargs/
答案 2 :(得分:1)
如果您不希望find
枚举目录,请将其排除:
for source in $(find "$@" -not -type d); do
sort_imports "${source}"
done