如何为目录中的每个文件创建软链接?

时间:2011-02-01 15:33:00

标签: linux bash find

我有一个目录/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)之前,{}似乎正在运行。有办法解决这个问题吗?如果没有,我还能达到目标吗?

5 个答案:

答案 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年前发布的,我发布这个是为那些寻求与我一样的解决方案的人,然后才开始研究。