代码之家  ›  专栏  ›  技术社区  ›  Michu93

找到文件,将其转换并保留在bash的原始目录中

  •  0
  • Michu93  · 技术社区  · 7 年前

    .docx .pdf :

    for d in $(find /home/kfalasz/Pulpit/konwersjapdf -maxdepth 3 -name "*.docx")
    do
      soffice --headless --convert-to pdf $d
      rm $d
      echo $d
    done
    

    /home/kfalasz/Pulpit/konwersjapdf 我想把它们放在原始目录中,例如文件 /home/kfalasz/Pulpit/konwersjapdf/a/plot.docx 转换为 然后离开 /home/kfalasz/Pulpit/konwersjapdf/a/plot.pdf 实际上它把文件留在 /home/kfalasz/Pulpit/konwersjapdf/plot.pdf .

    如何保存原始文件树?

    3 回复  |  直到 7 年前
        1
  •  3
  •   Charles Duffy    7 年前

    GNU公司 find 它自己可以做你想做的事:

    find /home/kfalasz/Pulpit/konwersjapdf -maxdepth 3 -name "*.docx" \
      -execdir soffice --headless --convert-to pdf '{}' ';' \
      -delete
    

    -execdir 使每个命令直接在找到文件的位置运行。

    -exec -执行董事 true soffice 能够转换。


    作为一种替代方法 全部的 的版本 找到 ,不仅是GNU发布,还要考虑:

    find . -maxdepth 3 -name "*.docx" -type f -exec sh -c '
      for p do
        (cd -- "${p%/*}" || exit; exec soffice --headless --convert-to pdf "${p##*/}") \
          && rm -f -- "$p"
      done' _ {} +
    

    这里,由 ( 作用域 cd ;the exec 然后消耗子shell,结束手头的范围。

        2
  •  2
  •   FatalError    7 年前

    --outdir 你的命令是:

    soffice --headless --convert-to pdf --outdir "${d%/*}" $d
    

    在哪里? ${d%/*} 修剪文件名的最后一位并保留目录的基名称。

    你也可以用 pushd popd 改变cwd,但我个人更喜欢flag选项。

        3
  •  1
  •   iamauser    7 年前

    我没有 soffice 安装,但它听起来从OP的答案,适当的标志是走在这里的方式。这是一个 pushd popd 版本使用 find

    $ find . -maxdepth 3 -name "*.docx" | \
     xargs -I {} bash -c 'p="{}";
                          pushd $(dirname "$p") >/dev/null; 
                          bp=$(basename $p); 
                          soffice --headless --convert-to pdf "$bp"; 
                          popd>/dev/null;'