【发布时间】:2022-10-17 09:19:41
【问题描述】:
我对材料不是太深入,很少使用 Bash 脚本。 即使进行了一些研究,我也无法快速学习 Bash 中的所有内容,以便我可以在整个目录及其子目录中搜索文件,然后输出它们的类型。我现在已经对函数的方向有了一些了解,但又不太知道如何递归地执行此操作。另外,我只想考虑文件而不考虑文件夹。 这是我自己已经完成的事情:
for item in "$1"/*
do
if ! [ -d $item ]; then
echo $(file $item)
fi
done;
因此,当调用脚本时,路径作为参数传递。然后在路径中搜索非目录,并将其类型与命令文件一起输出。 但是这个递归又是如何实现子目录的呢? 我也通过迭代 ls -R 进行了尝试,但是文件夹的名称仍然被附加,我无法再通过我的方式检查它是文件夹还是文件。 编辑:我不能使用查找!
我很高兴有任何帮助!
【问题讨论】:
-
试试这个
find . -type f -exec file {} + -
对不起,我忘记写了。我不能使用查找:/
-
哼! bash 的目标是什么版本?重击4+?
-
这不一定是关于那个,而是关于学习和练习。用 find 它只是一个单行,是的
-
find绝对是最好的方法。只需使用find。在将所有这些文件传递给file时,在大型目录树 (file **) 上使用递归全局扩展可能会超过系统的ARG_MAX。find为您处理此问题。您可以使用xargs来管理它,但我看不出有什么好的理由,除非可能运行并行file进程。