我需要帮助识别特定文件的目录路径,以便将该文件的更新版本复制到同一目录。我还需要在同一目标目录中创建一个子目录。该文件可能存在多个目录。
我尝试过使用以下内容。 。
find /.mozilla/firefox -type f -name prefs.js
它确实有效,但它包含实际的文件名和完整目录,我只需要该目录。
有什么想法吗?
答案 0 :(得分:1)
使用find的-printf
指令:
find /.mozilla/firefox -type f -name prefs.js -printf "%h\n"
答案 1 :(得分:0)
您希望find
通过dirname
另外投放结果:
find /.mozilla/firefox -type f -name prefs.js -exec dirname {} \;
{} \;
是一个"魔法"指示找到的名称和分隔符的标记的字符串,必须对其进行转义,以便shell无法看到它。
有关详细信息,请参阅man find
。
答案 2 :(得分:0)
您也可以使用shell扩展来提取目录名称。
file="$(find /.mozilla/firefox -type f -name prefs.js)"
if
[[ -f "$file" ]]
then
dir="${file%/*}"
echo "Directory is : $dir"
else
echo "File not found"
fi
"${file%/*}
展开会删除最后一个斜杠以及file
之后的所有内容。它通过匹配以斜杠开头的最短字符串来实现,从file
的值的末尾开始。
答案 3 :(得分:0)
对于纯粹的bash版本:
shopt -s globstar # turn on ** matching
files=(.mozilla/firefox/**/prefs.js) # find files at any depth
dirs=("${files[@]%/*}") # remove the ending `/*' portion