我正在尝试查找给定路径中的所有目录,并在这些目录内创建软链接,使它们进入另一个位置具有相同名称的目录。许多目录的名称中都有空格。我将以下代码拼凑在一起,只要没有空格,它似乎可以正常工作。
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
是在给定的路径中只会有目录,而没有文件,但是我意识到包括它会更好。
您的命令存在一些问题:
/some/path/*
如果目录太多,可能导致参数列表过长的错误 /some/path
它不过滤目录或文件
这是非常低效的,因为它使用了内联脚本,sh -c
但是-exec ... {} \;
使用ln
错误的参数位置,ln -s source dest
将创建从source
到dest
而不是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] 删除。
我来说两句