为了检查一些恢复的数据,我正在编写一个脚本,该脚本递归地遍历文件夹和文件并最终在它们上运行文件,以检查它们是否可能从某个备份中完全恢复。(恢复的文件播放,并被识别为 mp3 或其他音频,非工作文件为 ASCII-Text)
现在我只要让它检查我的测试文件夹结构,打印所有文件夹和相应的文件就很满意了。(打印它们主要是为了测试,也因为我想记录脚本当前在哪里以及它到底走了多远,以验证已经处理了什么)
我尝试使用 2 个 for 循环,一个用于文件夹,一个用于文件。(因此理想情况下它需要 1 个文件夹,然后列出其中的文件(或可能深入到子文件夹),并且在每个文件夹下面只给出该子文件夹中的文件,然后继续下一个。例如:
Folder1
- File 1
- File 2
-- Subfolder
-- File3
-- File4
Folder2
- File5
但是,这似乎不适用于通常建议的方式(例如 for 循环)。我尽可能使用“find . -type d”作为目录和“find .-type f”或“find * -type f”(这样它就不会进入子目录)但是,当只是打印路径/文件以检查它是否按照我的意愿运行,很明显这不起作用。
它似乎总是首先打印所有目录(第一个循环),然后是所有文件(第二个循环)。为了跟踪它正在做什么并更容易知道检查/恢复了什么,我想以更有序的方式执行此操作,如上所述。那么是我做错了什么,还是这可能是 bash 中 for 循环的一般限制?
另一个可能相关的问题:虽然将 find 的输出分配给数组似乎可行,但它不能作为数组访问......
循环示例:
for folder in '$(find . -type d)' ; 做
echo $folder
让文件夹计数器 ++
完成Arrays:folders=("$(find . -type d)")
#据我所知,这应该将输出分配为数组
#但是,它并没有以某种方式正确分配为
echo "$folders[1]"
#不起作用(空格所需的引号)