我有一个目录/original
,它有数百个文件。我有一个脚本,它将一次处理一个文件并删除该文件,以便在脚本中断时不再执行。所以,我需要一些指向/original
到/processing
上的文件的软链接。这是我试过的:
find /original -name "*.processme" -exec echo ln -s {} $(basename {}) \;
并得到类似的东西:
ln -s /original/1.processme /original/1.processme ln -s /original/2.processme /original/2.processme ln -s /original/3.processme /original/3.processme ...
我想要类似的东西:
ln -s /original/1.processme 1.processme ln -s /original/2.processme 2.processme ln -s /original/3.processme 3.processme ...
在转换$(basename)
之前,{}
似乎正在运行。有办法解决这个问题吗?如果没有,我还能达到目标吗?
答案 0 :(得分:12)
您还可以使用cp
(特别是创建符号链接的-s
选项),例如。
find /original -name "*.processme" -print0 | xargs -0 cp -s --target-directory=.
答案 1 :(得分:6)
find /original -name '*.processme' -exec echo ln -s {} . \;
特别感谢Ryan Oberoi帮助我意识到我可以使用.
代替$(basename ...)
。
答案 2 :(得分:2)
怎么样 -
ln -s $(echo /original/*.processme) .
答案 3 :(得分:1)
尝试一下:
find /original -name "*.processme" -exec sh -c 'echo ln -s "$@" $(basename "$@")' _ {} \;
答案 4 :(得分:0)
你只需要删除echo并完全删除文件路径和basename的重复
如果你的Source文件夹是
ls -l /original
total 3
-rw-r--r-- 1 user user 345 Dec 17 21:17 1.processme
-rw-r--r-- 1 user user 345 Dec 17 21:17 2.processme
-rw-r--r-- 1 user user 345 Dec 17 21:17 3.processme
然后
cd /processing
find /original -name "*.processme" -exec ln -s '{}' \;
应该制作
ls -l /processing
total 3
lrwxrwxrwx 1 user user 33 Dec 17 21:38 1.processme -> /original/1.processme
lrwxrwxrwx 1 user user 33 Dec 17 21:38 2.processme -> /original/2.processme
lrwxrwxrwx 1 user user 33 Dec 17 21:38 3.processme -> /original/3.processme
意识到OP是从5年前发布的,我发布这个是为那些寻求与我一样的解决方案的人,然后才开始研究。