如何在bash脚本中找到要处理的文件的目录

时间:2017-02-05 01:28:20

标签: bash

我需要帮助识别特定文件的目录路径,以便将该文件的更新版本复制到同一目录。我还需要在同一目标目录中创建一个子目录。该文件可能存在多个目录。

我尝试过使用以下内容。 。

find /.mozilla/firefox -type f -name prefs.js

它确实有效,但它包含实际的文件名和完整目录,我只需要该目录。

有什么想法吗?

4 个答案:

答案 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