处理 find 命令的工作目录

处理 find 命令的工作目录

我将 pdf 文件传递​​给脚本并提取各个部分(例如路径、名称、扩展名),以便我可以找到存储在 org 文件中的一些相关注释。

想要处理当前工作目录中不包含路径的文件(例如file.pdf而不是./file.pdfor /path/file.pdf)。目前我有一个问题,因为我必须设置fdir

for fl in "$@"; do
   fnme=${fl##*/}
   fext=${fl##*.}
   fdir=${fl%/*}
   fnam=${fnme%.*}
   
   find "$fdir" -type f -name "${fnam}.org"
done

答案1

如果您使用该实用程序dirname,它将正确返回.其中没有目录路径的路径名参数:

for pathname do
    name=$( basename "$pathname" )
    find "$( dirname "$pathname" ) -name "${name%.*}.org" -type f
done

如果您知道您正在处理以 结尾的文件名.pdf,那么您可以使用

for pathname do
    find "$( dirname "$pathname" ) -name "$( basename "$pathname" .pdf ).org" -type f
done

如果你有zsh外壳,你可以使用

for pathname
    find $pathname:h -name $pathname:t:r.org -type f
done

:h返回路径名的“头”,即目录路径部分,而:t返回“尾”,即文件名部分。您可以使用 . 获得文件名的无扩展名“根” :r

如果您只想查找与原始文件相同的目录,那么您还需要限制这样find做的递归。您可以使用-maxdepth 1最新的find.

答案2

如果为空,您可以默认为./搜索目录。$fdir例如:

find "${fdir:-./}"  -type f -name "$fnam.org"

相关内容