Bash - 递归查找目录及其子目录中所有文件类型的好方法是什么?
Bash - What is a good way to recursively find the type of all files in a directory and its subdirectories?
我对 material 了解不深,很少使用 Bash 脚本。
即使进行了一些研究,我也无法快速了解 Bash 中的所有内容,以便我可以在整个目录及其子目录中搜索文件,然后输出它们的类型。我现在已经了解了一些函数的方向,但又不太清楚如何递归地执行此操作。另外,我只想考虑文件而不是文件夹。
这是我自己已经完成的事情:
for item in ""/*
do
if ! [ -d $item ]; then
echo $(file $item)
fi
done;
所以当调用脚本时,路径作为参数传递。然后在路径中搜索非目录,并使用命令文件输出它们的类型。
但是,这种递归和子目录如何实现呢?
我也通过遍历 ls -R 来尝试它,但是文件夹的名称仍然被附加,我无法再通过我的方式检查它是文件夹还是文件。
编辑:我无法使用 find!
我很高兴能得到任何帮助!
您可以使用 bash 扩展的 globbing 功能:
$ shopt -s dotglob globstar
$ for i in **/*; do [ -d "$i" ] && continue; file "$i"; done
这可能有帮助:How to recursively list subdirectories in Bash without using "find" or "ls" commands?
也就是说,我将其修改为接受用户输入,如下所示:
#!/bin/bash
recurse() {
for i in ""/*;do
if [ -d "$i" ];then
echo "dir: $i"
recurse "$i"
elif [ -f "$i" ]; then
echo "file: $i"
fi
done
}
recurse
如果您不想要文件部分(看起来您不想要),那么只需删除 elif 和它下面的行。我把它留在原来的 post 也有。希望这有帮助。
建议
file $(find -type f 2>/dev/null)
解释:
find
递归搜索当前文件夹的命令。
仅过滤来自 find
命令的文件:-type f
.
忽略 find
permission/access 错误 2>/dev/null
运行 file
对每个找到的文件执行命令。
我对 material 了解不深,很少使用 Bash 脚本。 即使进行了一些研究,我也无法快速了解 Bash 中的所有内容,以便我可以在整个目录及其子目录中搜索文件,然后输出它们的类型。我现在已经了解了一些函数的方向,但又不太清楚如何递归地执行此操作。另外,我只想考虑文件而不是文件夹。 这是我自己已经完成的事情:
for item in ""/*
do
if ! [ -d $item ]; then
echo $(file $item)
fi
done;
所以当调用脚本时,路径作为参数传递。然后在路径中搜索非目录,并使用命令文件输出它们的类型。 但是,这种递归和子目录如何实现呢? 我也通过遍历 ls -R 来尝试它,但是文件夹的名称仍然被附加,我无法再通过我的方式检查它是文件夹还是文件。 编辑:我无法使用 find!
我很高兴能得到任何帮助!
您可以使用 bash 扩展的 globbing 功能:
$ shopt -s dotglob globstar
$ for i in **/*; do [ -d "$i" ] && continue; file "$i"; done
这可能有帮助:How to recursively list subdirectories in Bash without using "find" or "ls" commands?
也就是说,我将其修改为接受用户输入,如下所示:
#!/bin/bash
recurse() {
for i in ""/*;do
if [ -d "$i" ];then
echo "dir: $i"
recurse "$i"
elif [ -f "$i" ]; then
echo "file: $i"
fi
done
}
recurse
如果您不想要文件部分(看起来您不想要),那么只需删除 elif 和它下面的行。我把它留在原来的 post 也有。希望这有帮助。
建议
file $(find -type f 2>/dev/null)
解释:
find
递归搜索当前文件夹的命令。仅过滤来自
find
命令的文件:-type f
.忽略
find
permission/access 错误2>/dev/null
运行
file
对每个找到的文件执行命令。