将find -exec与basename一起使用时,如何在目录中保留空格?

马丁·博斯特伦

我正在尝试查找给定路径中的所有目录,并在这些目录内创建软链接,使它们进入另一个位置具有相同名称的目录。许多目录的名称中都有空格。我将以下代码拼凑在一起,只要没有空格,它似乎可以正常工作。

find /some/path/* -maxdepth 0 -exec sh -c "ln -s /some/other/path/"'$(basename {})'" {}" \;

我应该如何改变它来处理空间?我的目录名中通常没有它们,但是Windows PC上的这些镜像目录中确实使用空格。任何帮助是极大的赞赏!

编辑

针对cuonglm和Gilles的观点:

  • ln -s命令参数的顺序没有弄错,但是从我的解释中我想做的并不是很清楚。对于其中的每个目录/some/path/,我都希望该目录中创建一个符号链接,指向该目录中具有相同名称的目录/some/other/path/所以/some/other/path/source/some/path/destination之所以要这样做,是因为在中/some/path/包含目录的子集/some/other/path/,并且我希望从子集到每个目录的完整集都有一个链接。

  • 路径中不会有太多目录,但是我同意不防范它是毫无意义的缺陷。

  • 我不使用的原因-type d是在给定的路径中只会有目录,而没有文件,但是我意识到包括它会更好。

cuonglm

您的命令存在一些问题:

  • /some/path/* 如果目录太多,可能导致参数列表过长的错误 /some/path

  • 它不过滤目录或文件

  • 这是非常低效的,因为它使用了内联脚本,sh -c但是-exec ... {} \;

  • 使用ln错误的参数位置,ln -s source dest将创建从sourcedest而不是dest到的符号链接source


您可以POSIXly做到:

find /some/path ! -path /some/path -prune -type d -exec sh -c '
  for f do
    ln -s "$f" /some/other/path/"${f##*/}"
  done
' sh {} +

或者,如果您的find支持-maxdepth

find /some/path -maxdepth 1 -type d -exec sh -c '...' sh {} +

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将-exec {} ls与find命令一起使用时,权限被拒绝

将 scanf() 与“%c”一起使用时的前导空格

将PV与find -exec一起使用

C ++:如何在将getline()与ifstream对象一起使用时从文件中读取一行,如何跳过第一个空格?

将xargs与find一起使用

如何将find命令与变量一起使用

与find一起使用时,为什么带有后缀的basename在子shell中不起作用?

如何在ANT脚本中将Linux“ find”与“ -exec”命令一起使用?

TypeError:对象{...}没有方法'find'-当将mongoose与express一起使用时

将 std::find 与 std::string 数组一起使用时出现问题

与-exec echo {}选项一起使用时,从find命令输出中删除前导点

如何将exec()与输入参数一起使用?

执行:将字符串与exec.Command一起使用时出现奇怪的结果

当将exec与&一起使用时,最终命令不会运行

将 find 与循环一起使用,返回名称中带有空格的文件

与find -exec一起使用awk

将find -exec与包含美元符号($)的文件名一起使用

检测损坏的JPEG:将find -exec与||一起使用 逻辑运算符

将COPY与多个源文件一起使用时,目标位置必须是目录,并以/结尾

将 prune 和 -out 与 find 命令一起使用无法排除目录

颤动:如何在将导航器与页面一起使用时处理后退按钮按下

与find一起使用“ -exec”时“没有这样的文件或目录”

将条件查询与休眠一起使用时,如何将条件“或”在一起?

将std :: find()与反向迭代器一起使用

将find与2组变量一起使用

将find命令与-perm和-maxdepth一起使用

将通用Lambda与std :: find_if一起使用

将DISTINCT与FIND_IN_SET一起使用

将.find()jQuery函数与nodeList一起使用