【发布时间】:2021-06-24 00:42:27
【问题描述】:
我正在尝试编写一个 bash 脚本,用于在整个计算机(不包括系统文件和 Homebrew 文件)中搜索包含(其文件名)给定术语 ($1) 的文件和文件夹。但是,如果一个文件夹已添加到结果列表中并且它包含子文件夹/文件(它们的文件名再次)包含搜索词,那么我不想添加子文件夹/文件。
这是我试图获得的输出示例:
"/Users/example/Library/Logs/Brave"
"/Users/example/Library/Application Scripts/com.brave.desktop"
"/Users/example/Library/Application Scripts/com.brave.desktop.safari"
"/Users/example/Library/Containers/com.brave.desktop.safari"
# not this last one
"/Users/example/Library/Containers/com.brave.desktop.safari/Data/Library/Application Scripts/com.brave.desktop.safari"
为了提供一些上下文,脚本的输出将用于删除文件/文件夹,这就是我不想输出子文件夹的原因。
到目前为止,这是我的脚本:
searchResults=($(fd --exclude /System --exclude /usr/local/Homebrew -uu $1 / | sed -e 's/^/"/g' -e 's/$/"/g' | tr '\n' ' '))
for res in "${searchResults[@]}"
do
printf '%s\n' $res
done
示例 查询词语:搅拌机 假设我的电脑有这些文件和文件夹:
"/Users/example/Library/Logs/blender"
"/Users/example/Library/Application Scripts/com.blender.desktop"
"/Users/example/Library/Application Scripts/com.blender.desktop/blenderfile.txt"
"/Users/example/Library/Application Scripts/com.blender.desktop/blenderfolder"
脚本应该输出:
"/Users/example/Library/Logs/blender"
"/Users/example/Library/Application Scripts/com.blender.desktop"
我没有太多关于 bash 脚本的知识,所以我不知道该怎么做。任何想法将不胜感激。
【问题讨论】:
-
@oguzismail 我添加了一个示例以进行澄清。本质上,因为我将使用搜索结果删除来删除文件/文件夹,例如 /something 和 /something/example.txt 出现在搜索结果中,我将删除 /something 然后 /something/example.txt这会破坏脚本,因为它已经被删除了。
-
是的,这就是我想要实现的目标。