使用 find + xargs 使用 KDE Kate 一次编辑多个文件

使用 find + xargs 使用 KDE Kate 一次编辑多个文件

问题:在一个 kate 进程中编辑多个文件。

  1. FILE_LIST 是一个包含路径列表的变量

    FILE_LIST="$MAIN_PATH1  $MAIN_PATH2 ... $MAIN_PATH3"
    
  2. /tmpDST_DIR 是要编辑的文件的符号链接的目标文件夹。

  3. for 循环提供查找请求

  4. 查找请求使用 xargs 构建链接文件;之所以使用,print0/-0是因为某些文件名包含空格

    for A_DIR in $LIST_PATH ; do
    
        find "$A_DIR" -type f  ! -name "*.*~" ! -path "*000_ERRORS*" ! -path "*KEEP*" -print0 | xargs -0 -I@  bash -c " ln -s \"@\"  \"$DST_DIR/${@##*/}\""
    
    done
    
  5. 到这里一切都好。所有符号链接都在一个文件夹中。

  6. 然后另一个人立即找到请求饲料凯特。

    查找“$WORK_PATH”-type l -print0 | xargs -0 -I{} xdg-su -c "凯特 {} "

这并不像预期的那样工作。文件只能逐一访问。那不是目标。

但在另一个终端中,如果我手动运行第二个 find request 命令:

find /tmp/000_PGM_001 -type l -print0 | xargs -L 1 -0 -I{} bash -c "kate '{}'"

我可以在同一个实例中获取所有文件。我可以手动重复该命令,直到获得一次 kate 安装中的所有文件。

答案1

听起来像你需要的(假设是 GNU 系统)

dirs=(
  "$MAIN_PATH1"
  "$MAIN_PATH2"
  "$MAIN_PATH3"
)
LC_ALL=C find "${dirs[@]}" -name '*000_ERRORS*' -prune -o \
  '*KEEP*' -prune -o ! -name '*~' -type f -exec ln -st "$DST_DIR" {} +

至于你的凯特的事情:

find "$WORK_PATH" -type l -exec env LINK='{}' xdg-su -c 'kate "$LINK"' ';'

这里将文件路径作为环境变量传递,并假设xdg-su脚本在桌面环境中运行的命令不会删除它。

无论如何,查看该xdg-su脚本的内容,您只想向其传递固定命令以像这样运行kate "$LINK";向其传递任意数据将是不可靠且危险的。

相关内容